cs_Stormy
Messages postés255Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention16 janvier 2007
-
26 févr. 2006 à 22:46
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 2015
-
18 mars 2006 à 14:05
Je suis pas codeur PHP et j'ai besoin d'un avis. Dans un script PHP je considère un champ HTTP concernant X-Forwarded-for. Or, celui-ci peut être à l'origine d'une injection de code PHP. J'ai donc cherché des expressions afin de filtrer les caractères sensibles. Deux méthodes simples, sont-elles justes dans leur dev? Merci à tous et ++
// Exemple 1 :
// Inscrit la chaîne de caractères envoyée en vérifiant le contenu.
// Logique mais risque de planter le script (argument invalide) -
if ($HTTP_X_FORWARDED_FOR)
{
# On ajoute un slash / à certain caractères (ruine le code malicieux) -
# Caractères spéciaux : . \\ + * ? [ ^ ] $ ( ) { } = ! < > |
$ip = preg_quote(getenv("HTTP_X_FORWARDED_FOR"), ("/");
$proxy = getenv("REMOTE_ADDR");
$host = gethostbyaddr($REMOTE_ADDR);
}
// Exemple 2 :
// À partir de PHP 4.0b3
// On recherche une chaîne de caractères afin de filter les entrées -
if ($HTTP_X_FORWARDED_FOR)
{
$pos = strrpos($ip, "PASSTHRU"); // Simple exemple !!!
if ($pos false){$ip getenv("HTTP_X_FORWARDED_FOR");}
else{$ip = ""}; // Chaîne nulle -
};
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 27 févr. 2006 à 10:55
Hello,
prière de se calmer : inutile de se montrer condescendant ("(jrisque pas de trainer ici moi. jretourne chez les grands) "). Tu n'es sans doute pas le seul ici à savoir coder en asm et/ou en C++.
Ce qui m'intrigue dans tes questions/réponses, c'est que tu montres ne surtout pas vouloir coder en php. Or, si tu as un problème de sécurité, ce n'est pas en appliquant 3 lignes de code sans les comprendre que tu déjoueras des "hackers" qui, pour certains, connaissent justement php sur le bout des doigts. Et ce ne sont pas des compétences en C++ ou ASM qui t'aideront sur ce coup.
Bref, comme te le dit Fhx : si tu veux être sûr de toi, tu dois déjà passer par la variable $_SERVER['HTTP_X_FORWARDED_FOR'], car sinon, tu passes par les super globales des anciennes versions de PHP, tant décriées à cause, justement, des problèmes de sécurité qu'elles posent. (c'est valable pour REMOTE_ADDR et REMOTE_HOST).
Quant à une expression régulière pour parser une IP : http://www.expreg.com/liresource.php?type=IP&rt=source
Ces considérations mises à part, tes codes sont à peu près justes, oui.
cs_Stormy
Messages postés255Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention16 janvier 2007 26 févr. 2006 à 23:18
Tu ne comprends pas. Je veux pas coder un code PHP. Je veux comprendre comment filtrer un contenu, en l'occurence $ip. A l'origine, celui-ci est simplement ainsi :
$ip = getenv("HTTP_X_FORWARDED_FOR");
Or, l'injection PHP se fait par le biais de cette en-tête HTTP. Je veux juste savoir comment cette variable $ip peut être vérifier. Comment examiner les occurences éventuelles de caractères sensibles. Mon code est-il juste?
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 27 févr. 2006 à 00:01
"Je veux pas coder un code PHP." Ah bah mauvais forum alors :/
"Je veux comprendre comment filtrer un contenu, en l'occurence $ip." Expression régulière.
"A l'origine, celui-ci est simplement ainsi :
$ip = getenv("HTTP_X_FORWARDED_FOR");" Oui, mais je te dis que tu dois changer getenv() par $_SERVER[]. Pas compliqué pourtant :o
De plus, HTTP_X_FORWARDED_FOR est utile dans le cas où ton visiteur passe par un proxy. Si ton visiteur veut bien entendu te le transmettre...
Maintenant, ce que tu veux, c'est l'ip de ton visiteur ==> comme je te l'ai déja dit, va voir des scripts de récupération d'IP, y'en a un paquet, c'est pas ca qui manque... !
"Or, l'injection PHP se fait par le biais de cette en-tête HTTP." Injection PHP... si t'arrives à te faire bouffer sur une en-tête HTTP, j'imagine le pire !
"Je veux juste savoir comment cette variable $ip peut être vérifier." Tu peux utiliser les expressions régulières... le masque est un peu comme ca :
[nombre 0-255] . [nombre 0-255] . [nombre 0-255] . [nombre 0-255]
Voila.
"Mon code est-il juste?" Non, c'est ce que je viens de te dire... mais t'as pas l'air de t'en soucier.
"if ($HTTP_X_FORWARDED_FOR)" Y'a rien de plus "bête" à écrire. La tu teste quoi ? La présence d'une variable ? Le fait qu'elle soit vide ? Qu'elle soit booléenne de type TRUE/FALSE ?
La on ne sait rien. Moi si je lis ca, c'est que $HTTP....FOR est un booléen et que tu teste si cette variable est à TRUE. Hors c'est faux, cette variable est une chaine de caractères.
Voila pourquoi je te dis que ton code est erroné et qu'il faut utiliser la fonction isset() pour déterminer la présence de laditte variable.
Maintenant, libre à toi de faire comme tu veux.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Stormy
Messages postés255Date d'inscriptionsamedi 20 avril 2002StatutMembreDernière intervention16 janvier 2007 27 févr. 2006 à 01:47
Je veux bien être patient (puisque tu l'es avec moi). Je reprend. PHP j'men tamponne royalement. J'me suis pas cassé la tête 8 ans à coder C++ et ASM pour brouter du script (rien contre au demeurant). Il existe un GuestBook (admbook)sur lequel il est possible d'injecter un code PHP par une requête cliente HTTP dont le champ X-Forwarded-For comporte l'evil code. La moitié des sites hébergeant ce Livre d'Or sont des passoires. Les admins prévenus, je pensais juste leur donner le moyen de corriger cette faille en 3 lignes. Note bien ça, FixMan, je vais pas coder en PHP comme si je partais de rien (j'men fous mais j'la déjà dit ça). Le truc, c'est juste de donner une idée sur les expressions à utiliser. Je résume :
1 Champs de données
1 comparaison avec les caractères interdits
1 retour True ou False pour inscription ou non.
Alors t'emballe pas coco et relis le post.
Merci pour l'info sur l'expression régulière sur IP
Bye (jrisque pas de trainer ici moi. jretourne chez les grands)
cs_infoing
Messages postés6Date d'inscriptionlundi 20 février 2006StatutMembreDernière intervention15 avril 2006 18 mars 2006 à 13:38
bonjour je vous cantaque pour m'aider faire un filtre de contenu des pages web esperont que vous pouver m'aider percque c'est le theme de mon projet de fin est mon probleme c'est que j'ai pas trouver le langage le plus adapter a ce type de l'application est comme faire chercher par contenu dans une pages web
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 18 mars 2006 à 14:05
Quand on veut faire de la sécurité, il faut savoir un minimum de choses sur le support à protéger.
En l'occurance, je rectifie tes erreurs quand non seulement elles sont dépréciées, mais en plus peuvent comporter un trou de sécurité ouvert.
Tu parles justement de sécurité mais tu ouvres toi même les portes pour ca.
Maintenant, que tu codes en ASM c'est super génial pour toi. Je respecte cela mais ici point n'est besoin de savoir coder en ASM pour faire du PHP.
Mais bon, Malalam t'as dit la même chose que moi mais à peu de choses près...