Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

robustesse des expressions regulieres.

3 réponses
Avatar
Demosthene
Bonjour à tous,

Je me pose une question sur la robutesse des expressions régulières que
j'utilise pour filtrer mes entrées (merci pour les conseils saphirtech :)
Y-a t-il moyen de passer à travers mes filtres avec des entrées
calculées : une injection RegExp en quelque sorte ?
J'ai trafiqué des entrées avec des \ sans succés pour l'instant.
Connaissez-vous des exemples de masques fragiles ?

Dans le doute, je suis prèt à alourdir le traitemet en expurgeant mes
entrées de l'\ avant de les soumettre à mes expressions régulières.
Y-aurait-il d'autres caractères "nocifs" ?

Dites moi également ET GENTILLEMENT si je m'égare ;)

Démosthène

3 réponses

Avatar
Marc
Demosthene wrote:

Dites moi également ET GENTILLEMENT si je m'égare ;)



tu confonds :

1 - l'expression reguliere qui forme le masque de validation
2 - l'entité testée sur ce masque (une chaine de caracteres).

* le caractere n'a de signification que dans la regexp
* il n'est rien d'autre qu'un caractere ordinaire du coté
de la chaine traitée.

ca te rassure ?

Avatar
Vincent Lascaux
Dites moi également ET GENTILLEMENT si je m'égare ;)


Le seul truc dangereux serait d'utiliser une donnée venant de l'utilisateur
pour construire ton expression régulière.
Une expression entièrement faite à la main ne posera pas de problème (si
elle est bien faite) quelque soit l'entrée (soit l'entrée matchera soit elle
ne matchera pas, et la présence de caractères étranges ne changera rien au
probleme (sauf bug de PHP)).

Maintenant, si tu veux utilises par exemple une regexp pour highlighter un
mot comme ca:
$text = preg_replace($mot, "<b>$mot</b>", $text);
alors oui tu t'expose à des problemes si $mot contient des caractères qui
ont un sens spécial dans une regexp (.*?()[]/...)
Il convient d'utiliser preg_quote comme tu utiliserais
mysql_real_escape_string pour construire une requête mysql.

--
Vincent

Avatar
Demosthene
Merci, à tous les deux :)

C'est parfaitement clair.

Démosthène