expression réguliere et securité

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : expression réguliere et securité

par BeRoots » 08 mars 2006, 22:51

bon j'y suis finalement arriver mais en scindant ma regex en deux filtre distinct :?

l'un contient les caractères que j'accepte.
et l' autre contient des condition particulières sur certains de ces caractères afin de bloquer touts contenu malveillant.

une petite question maintenant en ce qui concerne la fonction PCRE preg_match_all:

puis je verifier le resultat de mes deux filtres dans la même fonction ou faut il que j'utilise deux fois cette fonction?

merci d'avance pour votre aide ;)

par BeRoots » 05 mars 2006, 23:51

OK, j'ai encore re-re-rechanger ma façon de faire donc oublier tout ce qui est ecrit avant ce message dans le sujet :oops:

j'opte pour PCRE avec la fonction preg_match_all :wink:

ma regex est maintenant la suivante:
$valid_insert_security = "#([[:blank:]]+|[\w]+|[-)/(!?.,;:@]+)#";
elle filtre tout les caractères autres que lettres, chiffres, caractères accentués, lettres grecques.

j'aimerai aussi y ajouter " et ' avec interdiction de chaine genre " " et ' ' (avec ou sans espace entre):-k

pour simplifier pour le moment, si quelqu'un pouvait m'aider à faire une regex avec pour seul caractère autoriser " et ' (bien sur sans " " et ' ')

MERCI D'AVANCE :wink:

par BeRoots » 05 mars 2006, 15:57

ok j'ai fait des test sur ma regex et j'en suis pour le moment à ceci:
$valid_insert_security = "#([[:alnum:][:blank:]]+|[&²éèàçùêëîï]+)+#";
je ne veut pas m'attarder sur POSIX ou PCRE pour le moment car ma regex n'est pas encore au point et il faut que j'attende qu'elle soit fini pour tester le temps d'execution avec les deux fonctions :wink:

j'aimerai que cette regex autorise seulement les caractères lettre, chiffre,les caractères accentués, et ceux-ci:
( \ ) _ - & ' % ! : ; , . ? /

ici avec le OU ( | ), je n'est que &²éèàçùêëîï qui est selectionner dans ma chaine :cry:
si j'enleve le OU, je n'est que les [:alnum:] et [:blank:] de selectionner

il faudrai mettre un ET mais j'ai pas trouver:oops:

1°) pouver vous m'aider car je n'arrive pas à faire en sorte que cette regex fonctionne :cry:

vu que c'est pour filtrer les entrées de formulaire, je me demande aussi si il ne serait pas plus interressant d'interdire certains caractères utiliser pour les injections mais à force de lire des pour et des contre, je sait plus trop quoi faire :?

pour moi, il serait plus judicieux de faire en sorte d'interdire les mots et caractères tres utilisé dans les attaques de tout type :-k

parcque sinon j'ai trouver ce regex contre les codes malicieux et les injections SQL qu'il pourrait être bon d'amélioré:
$valid_insert_security = "#(script)|(<)|(>)|(%3c)|(%3e)|(SELECT) |(UPDATE) |(INSERT) |(DELETE)|(GRANT) |(REVOKE)|(UNION)|(<)|(>)#"


2°) si vous avez une idée bien fondée là dessus aussi :wink:


pour testé la regex, je passe par ce script de test en ligne: testeur regex

par BeRoots » 05 mars 2006, 12:31

merci, c'est plus claire :wink:

les REGEX sont donc les expressions régulières si je ne m'abuse (POSIX et PCRE sont des fonctions sur ces regex) :-k

je n'est pas trouver le moyen de voir la configuration de php depuis phpmyadmin chez mon hébergeur :cry: existe il un requete pour les afficher?

par Cyrano » 05 mars 2006, 11:03

POSIX utilise les expression ereg ;
PCRE les expression preg;

La différence principale entre les deux, c'est que les expressions régulières PCRE seront en général plus rapide à l'exécution et comporteront des délimiteurs de début et de fin d'expression.

Les fonctions fopen ou fwrite n'ont strictement rien à voir avec les expressions régulières, elles servent à la manipulation de fichiers.

par BeRoots » 05 mars 2006, 03:04

en faite, c'est pour eviter les injections de touts types :wink:

c'est un filtre pour mes entrées de formulaire et je voudrai ne laisser passer que les chiffre, les lettres (avec ou sans accent), et certaint symbole tolerer (/ - , ' . \ )

quand je dit avec ou sans accent c'est en comptant l'accent circonflexe, les accents grave et aïgu et le trema (¨).

c'est pour cela que les classe de caractère pourrai peut être me symplifier mon expression regulière.

sinon, j'utilise preg_match ou checkdate pour le moment.

je n'est d'ailleur pas saisi si j'utilise POSIX, PCRE ou expression malgrer la lecture de la doc php à ce sujet :cry:

si j'ai bien compris POSIX englobe des fonction tel que Fopen(), fwrite()...
PCRE englobe les fonction preg_ et nessecite l'utilisation d'un php.ini
les expressions, je vois pas trop

si quelqu'un peu eclairer mes lanternes :wink:

par Cyrano » 05 mars 2006, 00:50

Les expressions régulières fonctionnent en principe sur tous types de serveur et pour différents langages. On les retrouve ainsi en PHP, en SQL, en JavaScript etc.... Pour PHP, ça dépend aussi si tu utilise des expressions et des fonctions POSIX ou PCRE, dans ce dernier cas, il faut vérifier que l'extension PCRE est actvée dans le php.ini.

Pour ce qui est de ton expression, tu n'es pas obligé d'utiliser des classes de caractère, ça dépend vraiment de ce que tu veux filter exactement : selon le cas, les classes seront ou non appropriées.

expression réguliere et securité

par BeRoots » 04 mars 2006, 22:43

salut à tous :)

je suis en train de me créé un modèle de chaine via les expressions régulières pour filtrer les entrée de mes champs de saisie :wink:

voila ce que j'ai fait:
$valid_insert_security = "#^[a-z0-9-_\./^¨àùçéè, ]$#"
n'est il pas mieux d'utilisé les classes de caractères ([:alnum:], [:blank:], [:digit:], [:punct:], [:space:] ...) pour définir mon filtre?

et aussi, ces classes sont elles propre au server unix ou peuvent elles ettre utilisées sur tout type de serveurs?


Merci d'avance pour vos conseils :wink: