L’injection SQL, expliquée aux débutants
Lecture : 5 minutes. Aucun prérequis.
L’injection SQL fait partie des failles web les plus connues. Elle apparaît quand un site fabrique une requête de base de données en collant ce que tape l’utilisateur. Ce guide montre le mécanisme, puis la parade.
1. Ce que fait une base de données
Un site stocke ses données (comptes, commandes, messages) dans une base. Il lui parle en SQL. Pour vérifier une connexion, il envoie par exemple :
SELECT * FROM clients WHERE nom = 'alice' AND code_acces = 'abc123';
La base répond par la ligne correspondante, ou par rien.
2. Où se glisse la faille
Le site ne connaît pas le nom à l’avance : il l’assemble à partir du formulaire. Voici le code fautif, en Python :
requete = "SELECT * FROM clients WHERE nom = '" + nom + "'"
Le texte saisi est collé tel quel dans la requête. La base ne distingue plus la requête de la donnée : tout ce qui est tapé peut devenir du SQL.
3. Le principe de l’injection
Si quelqu’un saisit x' OR '1'='1 comme nom, la requête devient :
SELECT * FROM clients WHERE nom = 'x' OR '1'='1'
La condition '1'='1' est toujours vraie : la base renvoie toutes les
lignes. Le visiteur a modifié le sens de la requête avec une simple apostrophe. Selon la faille, les
conséquences vont de la lecture de données privées à la modification ou à la suppression de tables.
4. Comment s’en protéger
- Les requêtes paramétrées : la requête et les valeurs voyagent séparément, donc une valeur ne devient jamais du SQL. C’est la protection de référence.
- Le moindre privilège : le compte de base utilisé par le site ne reçoit que les droits dont il a besoin, jamais ceux d’un administrateur.
- La validation des entrées : refuser ce qui n’a pas le bon format (un nombre, une date) réduit la surface d’attaque, sans remplacer les requêtes paramétrées.
- Des messages d’erreur neutres : ne pas afficher à l’utilisateur le détail d’une erreur de base de données.
La même requête, corrigée avec un paramètre :
curseur.execute("SELECT * FROM clients WHERE nom = ?", (nom,))
Ici, x' OR '1'='1 est cherché comme un nom, et personne ne porte ce nom : la base ne
renvoie rien.
5. S’entraîner sans risque
Ces techniques s’exercent uniquement sur les labs fournis par une plateforme d’entraînement, ou sur un système dont tu es propriétaire. Les tester sur un site qui n’est pas le tien, sans autorisation, est un délit.
Sur Start2Hack, tu apprends ce mécanisme en menant l’enquête : un cours guidé, puis des défis dans un environnement prévu pour ça, avec un agent IA qui te met sur la piste sans te donner la réponse.