Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/02/2006, 10h50   #1
Membre actif
 
Avatar de bigsister
 
Homme OLE MAIN()
Développeur Web
Inscription : octobre 2002
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme OLE MAIN()
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2002
Messages : 296
Points : 191
Points : 191
Par défaut [Sécurité] Controler une chaine/Injection SQL/chars étrangers

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 ?
bigsister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2006, 10h53   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2006, 11h09   #3
Membre actif
 
Avatar de bigsister
 
Homme OLE MAIN()
Développeur Web
Inscription : octobre 2002
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme OLE MAIN()
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2002
Messages : 296
Points : 191
Points : 191
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 ?
bigsister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2006, 11h32   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2006, 11h34   #5
Membre actif
 
Avatar de bigsister
 
Homme OLE MAIN()
Développeur Web
Inscription : octobre 2002
Messages : 296
Détails du profil
Informations personnelles :
Nom : Homme OLE MAIN()
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2002
Messages : 296
Points : 191
Points : 191
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...
bigsister est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h25.


 
 
 
 
Partenaires

Hébergement Web