L'injection SQL :
l'injection SQL consiste à modifier une requête d'un script par injection d'un code non prévu dans le script d'origine .
je vais essayer de donner un exemple simple, imaginons une requête qui permet l'identification .
mysql_query ("SELECT id WHERE login='".$_GET['pseudo']."' AND pass='".$_GET['password']"' ");
si le pirate au lieu de mettre un pseudo dans le champ du formulaire prévu pour cela, met
webmaster'-- que se passe t'il au niveau de la requête .
mysql_query ("SELECT id WHERE login='webmaster'--'
les -- veulent dire que ce qui suit est un commentaire , donc n'est pas pris en compte , le mot de passe non plus n'as pas été comparé, ce qui veux dire que la personne a utilisé l'identité du webmaster et a tout les privilèges.
avant de donner la solution il faut savoir que les injections SQL peuvent être utilisèrent d'un nombre incroyable de façon, par exemple si vous faites une requête sur une table qui ne contient pas de données sensibles, ne croyez pas que vous n'avez rien a craindre, car le pirate peu faire par exemple une Jointure, ou bien un UPDATE .
donc avant de faire une requête il faut absolument sécuriser les données recueillies depuis un formulaire et cela a l'aide de la fonction
addslashes()
Solution :
revenons a notre requête pour voir l'intérêt de addslashes()
$_GET['pseudo'] = addslashes ($_GET['pseudo']);
$_GET['password'] = addslashes ($_GET['password']);
mysql_query ("SELECT id WHERE login='".$_GET['pseudo']."' AND pass='".$_GET['password']"' ");
explications:
quand le pirate as mis comme pseudo webmaster'-- pour faire son injection SQL le
' est pris en compte dans la requête , avec addslashes le résultat est webmaster\\'-- ce qui fait que le
' est considéré comme faisant partie de la chaîne de caractère et ne seras donc pas traité dans la requête .
voila j'espère que c'était assez clair, vous m'excuserez de ne pas avoir donner plus d'exemples, mais le but premier est d'apprendre a éviter la faille et non de l'éxploiter
prochain tuto les failles XSS ou cross site scripting
[ Ce message a ete modifié par : : Deepblue le 16-05-2006 09:04 ]