SQL injection

Magazine
Marque
MISC
HS n°
Numéro
1
Mois de parution
octobre 2007


Résumé

Que se cache-t-il derrière les termes de « SQL injection » ? Le langage SQL, Structured Query Language, est le langage standardisé d'interrogation des bases de données. Les techniques d'injection SQL consistent à introduire du code supplémentaire dans une requête SQL. Elles permettent à un utilisateur malveillant de récupérer des données de manière illégitime ou de prendre le contrôle du système. Alors que les problèmes de sécurité réseau ou système sont plutôt bien connus, que les règles de filtrage réseau sont plus strictes que par le passé, que l'application rapide des correctifs de sécurité pallie les vulnérabilités système, la sécurité des applicatifs est souvent négligée. Le contexte des injections SQL est très varié. Il concerne toutes les applications utilisant une base SQL. On retrouve aussi bien les applications Web que les clients lourds. Identifier et exploiter une faille peut être assez simple si l'application retourne des messages d'erreurs spécifiques, mais peut être complexe en l'absence de message. On parle alors d'exploitation en aveugle. Enfin, on retrouve des applications n'effectuant aucun contrôle ou très peu sur les données entrées tandis que d'autres les filtrent efficacement. C'est un aperçu de cette richesse que va tenter de vous donner cet article.


1. Principe

Commençons tout de suite par regarder comment fonctionne une requête SQL. Dans cet exemple, l'utilisateur fournit à l'application un compte et un mot de passe. Si ceux-ci correspondent, il est authentifié et peut utiliser l'application.

$sql="SELECT login FROM users WHERE login='".$login."' AND pass='".$pass."'";
$result = mysql_query ($sql) or die ("Invalid query".mysql_error());
if($row = mysql_fetch_array ($result))
   print "Identified as ".htmlspecialchars($row['login']); 
   ...
}

Après saisie des informations, christophe et sesame, la requête SQL devient : 

SELECT login FROM users WHERE login='christophe' AND pass='sesame'

Les données entrées par l'utilisateur influent directement sur la requête et donc sur le résultat de celle-ci. Si aucun enregistrement n'est trouvé, c'est que soit le nom d'utilisateur, soit le mot de passe est incorrect. Pour être identifié dans cette application, il faut que la requête...

Cet article est réservé aux abonnés. Il vous reste 97% à découvrir.
à partir de 21,65€ HT/mois/lecteur pour un accès 5 lecteurs à toute la plateforme
J'en profite