Bacho's Design

The Online Maths School
🇺🇸 🇫🇷

Attaque sur un site web: Injection de commandes SQL

Injection de commandes SQL

   Un site web basé sur des BDD passant ses données sous forme de requêtes SQL est fragile contre les attaques par injection SQL. Dans l’abscence d’un control sur les paramètres passés dans la requête SQL, un hacker peut modifier la requète, accéder à la BDD puis modifier son contenu ! Il devient administrateur pouvant exécuter la requète de son choix. En effet, il existe des caractères qui permettent d’ignorer la suite d’une requète ou d’enchainer plusieurs requètes SQL. Ignorer la suite d’une requète?
Explication :
Prenons la requète suivante :
mysql_query("SELECT * FROM TableUtilisateurs WHERE login = '$login' AND pass = '$password’");
Supposons maintenant que notre formulaire d’identification contienne les deux cases suivantes:
		login	:
		Pass	:
	
Eve est une pirate et elle est assez maline, elle introduit dans la case du login la chaine suivante :
		login	:
En quoi cela est-il très interaissant pour elle ?
En effet, de cette manière, Eve a réussi à modifier ma requète en la requète suivant :

mysql_query("SELECT * FROM TableUtilisateurs WHERE login = '' OR 1=1"); //' AND pass = '$password'");

En mettant les ‘//’ Eve a réussi à mettre le control du mot de passe en commentaire, et donc à le désactiver. Ne connaissant pas un login correct, elle a remplacé le control du login par une condition toujours vraie ‘1=1’. Eve peut maintenant voir toute les pages qui lui sont interdites!! De la mème manière Eve peut supprimer la table des utilisateurs : ' OR 1=1"); drop table TableUtilisateurs ;

	login	:
Elle peut aussi la modifier, désactiver le firewall, ...

Lutter contre les attaques par Injection SQL

La fonction mysql_real_escape_string() protège les caractères spéciaux d’une commande SQL, son sur chaque variable évite les injections SQL.
	$query = sprintf("SELECT * FROM TableUtilisateurs WHERE login='%s' AND pass='%s'",
			mysql_real_escape_string($login),
			mysql_real_escape_string($password));
	
  Il existe aussi des astuces permettant d’éviter ce genre d’attaques, citons quelques unes:
  • Interdire les entrées utilisateurs telles que ";", "insert", "select", "//", "--", " update ", ...
  • Limiter le nombre de caractères d’une entrée utilisateur.
  • Eviter l’utilisation d’un compte utilisateur ayant un grand pouvoir administratif.
  • Quand cela n’est pas vraiment nécessaire, éviter le stockage d’informations importantes dans des cookies.

Retour au début de la page.

Copyright ©2009 Bacho's Design by Bachir Jean EL HAGE

Laissez votre commentaire
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on bool in /home/bachosdesign/public_html/files/_setup/pages/security_article.php:142 Stack trace: #0 /home/bachosdesign/public_html/files/_setup/pages/injectsql.php(60): include() #1 /home/bachosdesign/public_html/index.php(105): include('/home/bachosdes...') #2 {main} thrown in /home/bachosdesign/public_html/files/_setup/pages/security_article.php on line 142