|
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.
Commentaires
Ajouter un commentaire |
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
![]()
![]()
![]()
|
|||||||||||||||||||||||||||||||||||||||||||||||||
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