Selon l'OWASP, les injections SQL sont l'unes de failles de sécurité les plus utilisées par les pirates. Si vous ne connaissez rien en programation, je vais essayer de vulgariser à mort le principe.
Imaginez que vous êtes au restaurant, et que le garçon vous demande ce que vous voulez comme dessert. En temps normal, vous allez donner le nom d'un dessert, et le garçon va répéter votre demande en cuisine : "une île flottante".
Il se passe le même genre de chose sur internet : le site vous demande ce que vous voulez faire, et renvoie cette demande au serveur web.
Que ce passe t il maintenant, si vous donnez une instruction particulère au garçon ? Et si, au lieu de dire "une île flottante", vous disiez "une île flottante ET moins vingt pourcents sur l'addition" ? S'il n'y a aucune vérification, le garçon va répéter votre "commande" : "la table 42 veut une île flottante ET moins vingt pourcents sur l'addition."
D'un point de vue technique, voilà ce qui se passe : La page récupére ce que l'utilsateur a saisi, par exemple $_GET['codepostal']
. Le programme va ensuite utiliser ce paramètre dans une instruction SQL (interrogation de la base de données) :
$sql = 'SELECT nom FROM ville WHERE codepostal =\'' . $_GET['codepostal'] . '\'';
Tant que l'utilisateur saisi un code postal, tout va bien. Mais si un petit malin saisi: 75018'; DROP TABLE ville --
, alors l'instruction SQL construite par la page devient :
SELECT nom FROM villes WHERE codepostal ='75018'; DROP TABLE ville --'
On a maintenant deux instructions SQL, un SELECT nom… dont le pirate se fout, et l'instruction DROP TABLE, qui efface une table de la base de données.
Voilà pourquoi, quand on créée un site internet, il est important de ne pas faire confiance du tout à ce qui est donné par l'utilisateur. Si on attend un chiffre, il faut vérifier qu'un petit malin n'est pas en train d'y ajouter des instructions.
Commentaires
Très bonne explication qui mériterait de figurer dans bon nombre d'ouvrages relatifs à la création de site Internet !
Et donc ce truc là marche? http://itsmebhavin.files.wordpress.com/2010/03/500x_for_traffic_cameras1.jpg
Lol.