blog actif depuis 774 jours.

retours d'expériences, codes sources, réflexions, humeurs... d'un webmaster

 

Mar.

01

Juil.

 

L'injection de code SQL est une technique consistant à placer du code SQL dans les champs des formulaires. Ce code va s'insérer dans les requêtes SQL de la page qui exploitera les données du formulaire.

Il existe des précautions simples à mettre en place pour sécuriser vos formulaires et parer ce genre d'attaque.


Précaution no 1
Passer la variable register_globals à off, pour ne pas que les variables d'environnement, GET, POST, COOKIE et SERVER soient enregistrées comme des variables globales.
Ex : Pour traiter un formulaire avec la méthode POST, les données seront accessibles via les variables $_POST. Ce qui évite l'injection de données via l'url.
register_globals est à off par défaut depuis PHP 4.2.0.

Précaution no 2
Mettre magic_quotes_gpc (le serveur ajoutera un caractère d'échappement «  » devant tous les quotes) ou mieux, sécuriser les données de la variable $_POST à l'aide d'une fonction qui analyse et transforme les caractères spéciaux.

Précaution no3
Toujours encadrer les valeurs dans vos requêtes d'apostrophes :
SELECT * FROM table WHERE champ='val' plutôt que SELECT * FROM table WHERE champ=val
Ceci permettra de rendre plus difficile l'injection de code SQL.


Exemple :
Prenons par exemple un formulaire d'identification avec un champ « login » et un champ « passwd »
Les infos de connexion sont enregistrées dans une base MySQL. Pour vérifier que l'utilisateur peut se connecter, on lance la requête
SELECT * FROM table_utilisateurs WHERE identifiant ='$_POST['login']' AND passwd='$_POST['passwd']';
Exemple d'attaque :
On saisit dans le champ login "' OR 1 OR '" et dans le champ passwd "jhlsds"  :
La requête devient
SELECT * FROM table_utilisateurs WHERE identifiant ='' OR 1 OR '' AND passwd='jhlsds';
Cette requête retournera la liste des utilisateurs enregistrés et peut permettre d'être connecté via le premier trouvé (qui souvent est l'administrateur !!!)

Avec magic_quotes_gpc, on optient
SELECT * FROM table_utilisateurs WHERE identifiant ='' OR 1 OR ''' AND passwd='jhlsds';
Ce qui ne retournera rien.
Bookmark and Share

 

Commentaires

L'utilisation des magic_quotes n'est pas suffisante pour contrer l'injection SQL.
Dans tous les cas il faut vérifier les informations saisies dans le formulaire : types de valeurs attendues, texte indésirable (morceaux de requetes, de code...)

11/02/2009

 

Ajouter un commentaire

nom / pseudo :
e-mail :

(Votre e-mail ne sera ni exploité, ni divulgué.)

site (facultatif)
 

Webmaster depuis maintenant plus de 10 ans, j'ai créé ce blog pour publier mes retours d'expérience et parler du Web et du développement Web en général, mais aussi de plein d'autres choses...

romualb.com est sur Facebook
<Juillet 2010 
LunMarMerJeuVenSamDim
   01 02 03 04
05 06 07 08 09 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

 

 

Referencement annuaire gratuit Annuaire carte postale blog,,personnel communiquer gratuit Paperblog : Les meilleurs actualités issues des blogs Classement de sites - Inscrivez le vôtre! Inscrivez-vous maintenant sur Viadeo Web Developement Blogs - BlogCatalog Blog Directory web counter