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 :
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 :
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.