|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() OLE MAIN()Développeur Web Inscription : octobre 2002 Messages : 296 ![]() |
salut,
J'utilise souvent la fonction ereg() pour contrôler les paramètres passés en POST ou en GET dans mes formulaires. Or, la plupart du temps, il s'agit simplement d'empêcher l'injection de code SQL dans mes requêtes qui utilisent ces paramètres ou d'empêcher l'utilisation de caractères qui (pourquoi pas ?) feraient planter ma requête (caractères russes par exemple, caractères d'échappement ???) . J'empêche donc le simple ou le double quote selon le cas, j'autorise seulement les caractères utilisés dans la langue française ou proche (j'entend par là pas de caractères russes, japonnais, chinois etc. ). mais est-ce suffisant ? Voilà ma question : J'utilise MySQL, quelle expression régulière correspondrait à : "autoriser tous les caractères SAUF ceux susceptibles de permettre une injection SQL ET SAUF ceux qui seraient inconnus de MySQL et qui pourrait faire planter ma requête". Comment faîtes-vous ? Pourrais-je me contenter d'un add_slashes() au moment de l'utilisation de mes variables passées en GET ou POST ? |
|
|
00
|
|
|
#2 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
Selon ce que dit la doc PHP, un appel à mysql_real_escape_string() suffit à éviter les injections SQL. Pas besoin de s'embêter outre mesure, a priori.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() OLE MAIN()Développeur Web Inscription : octobre 2002 Messages : 296 ![]() |
salut kirkis,
Merci de ta réponse rapide. En effet je ne connaissais pas cette fonction Par défaut j'utiliserais celle-ci désormais J'apprends au passage que d'autres caractères peuvent permettre de faire des injections SQL : Selon http://fr3.php.net/mysql_real_escape_string : NULL, \x00, \n, \r, \, ', " et \x1a. Que sont \x00 et \x1a ? est-ce que ça prends en compte les échappement sous unix par ex? Seul "défaut" à priori : il faut se connecter à MySQL pour contrôler les variables de formulaire... en terme de performance est-ce que ça a un impact négatif ? Comment se comporte MySQL si on lui envoit une chaine avec des caractères chinois par ex ? |
|
|
00
|
|
|
#4 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Pense à regarder la fonction quote_smart() de la même page de la doc
Entre nous, si tu souhaites protéger des variables avant insertion dans la BDD, pourquoi te préoccuper de la présence d'une connexion à cette BDD ? Tu l'as forcément, sinon tu ne te poserais pas la question de l'injection ! Ce défaut est en fait un faux défaut, ne crois-tu pas ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#5 |
|
Membre actif
![]() OLE MAIN()Développeur Web Inscription : octobre 2002 Messages : 296 ![]() |
oui j'avais vu la fonction pas mal en effet.
En fait il n'y a pas de nouvelle connexion nécessaire c'est vrai mais PHP est quand même obligé d'aller interroger mysql... mais bon j'imagine que la perte de temps douit être négligeable... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com