Filtre de contenu

Résolu
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 janvier 2007 - 26 févr. 2006 à 22:46
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 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 -
};

9 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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.
3
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
26 févr. 2006 à 23:09
Tester la présence d'une variable => fonction isset();
getenv() est à remplacer avec la superglobale $_SERVER[].

Et des scripts pour récupérer une IP, y'en a des tonnes qui sont bien mieux que ton bout de code :) Une petite recherche te le confirmera.
0
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 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?
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
27 févr. 2006 à 00:02
Ah okay, jviens de capter, je m'emballe un peu pour rien.

Expression régulière sur l'IP... tu trouves ca où tu veux sur le net.

Mais je maintiens quand même ce que je dis codifiant parlant.
0
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 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)
0
cs_Stormy Messages postés 255 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 16 janvier 2007
27 févr. 2006 à 16:39
Je ne suis pas condescendant. je joue au même jeu que ton camarade FhX.
Néanmoins, merci pour tes informations très claires.
0
cs_infoing Messages postés 6 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 15 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
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
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...
0
Rejoignez-nous