Thème > Développement
> > > Les failles web : Injections SQL

Les failles web : Injections SQL

Suite à une discussion avec un ami, sur la sécurité des API Web, j'ai décidé de faire quelques articles sur les failles web les plus courantes, il existe pleins d'articles dessus donc je ne m'éterniserais pas. Le but est de vous sensibiliser aux bases la sécurité internet et a vous d''allez plus loin.

Les injections SQL sont les plus courantes. Le but est de détourner les requêtes pour accéder à votre base de données ou accéder au backoffice d'un site.
L'injection SQL en PHP est souvent du à l'utilisation de la variable $_GET ou $_POST sans l'avoir au préalable testée.

Exemple :
Exemple de code :
$sql = "SELECT id FROM users WHERE user ='".$_POST["user"]."' AND password ='.$_POST["password"]."'";

si $_POST["user"] = "1' OR 1 = 1; -- " et $_POST["password"] = "dsfs":
Exemple de code :
$sql = "SELECT id FROM users WHERE user ='1' OR 1 = 1; --/ ' AND password ='dsfs'";


Exemple :
Exemple de code :
$sql = "SELECT id FROM users WHERE user ='".$_POST["user"]."' AND password ='.$_POST["password"]."'";

si $_POST["user"] = "aas bb" et $_POST["password"] = "' OR ''='":
Exemple de code :
$sql = "SELECT id FROM users WHERE user ='aas bb' AND password ='' OR ''=''";


La solution consiste utiliser la méthode mysql_real_escape_string() pour toutes variables php mises dans une requête et si vous le pouvez, tester les valeurs $_POST ou $_GET c'est a dire si vous attendez un entier : tester si c'est un entier.

Liens :
http://php.net/manual/fr/security.database.sql-injection.php
En savoir plus : http://fr.wikipedia.org/wiki/Injection_SQL