Qu’est-ce que l’injection SQL (SQLi) ?
L’injection SQL (SQLi) est un type d’attaque où les attaquants saisissent une instruction SQL malveillante dans un champ de saisie pour manipuler la base de données.
Cette attaque cible les applications qui ne parviennent pas à gérer correctement la validation et la saisie utilisateur, permettant un accès non autorisé à des données sensibles telles que des mots de passe ou des détails de carte de crédit, etc.
Comment fonctionne l’injection SQL
Lorsqu’une application inclut directement la saisie utilisateur dans une requête de base de données sans validation appropriée, les attaquants peuvent modifier le comportement de la requête pour saisir une instruction SQL malveillante.
Par exemple :
SELECT * FROM users WHERE username = 'admin' AND password = '12345';Un attaquant pourrait saisir :
' OR '1'='1Ce qui donne :
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';Cela retourne toujours true, accordant un accès non autorisé.
Pourquoi l’injection SQL est importante en cybersécurité
L’injection SQL est la technique la plus dangereuse et la plus ancienne en cybersécurité. Ce type d’attaque est constamment répertorié dans le Top 10 de l’OWASP.
Même de petites vulnérabilités permettent à un attaquant de :
- Accéder, modifier ou supprimer des données
- Contourner l’authentification
- Exécuter des opérations administratives sur la base de données.
- Compromettre l’ensemble du système.
Types courants d’injection SQL
- Injection SQL classique : Injection directe via des formulaires web ou des paramètres d’URL.
- Injection SQL aveugle : Les attaquants déduisent indirectement des informations de la base de données (par exemple, via des messages d’erreur ou le temps de réponse).
- Injection SQL basée sur UNION : Utilise l’opérateur UNION pour combiner les résultats de plusieurs requêtes.
- Injection SQL basée sur les erreurs : S’appuie sur les messages d’erreur de la base de données pour extraire des informations.
- Injection SQL aveugle basée sur le temps : Exploite les délais de réponse du serveur pour deviner les résultats des requêtes.
Comment prévenir l’injection SQL
1. Utiliser des requêtes paramétrées (instructions préparées)
Assurez-vous que les commandes SQL traitent les entrées utilisateur comme des données, et non comme du code exécutable.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))2. Validation et assainissement des entrées
Validez toutes les entrées des utilisateurs, en n’autorisant que les caractères attendus.
3. Utiliser des frameworks ORM
Des frameworks comme Prisma, Hibernate, etc., réduisent la manipulation directe du SQL.
4. Principe du moindre privilège
Limitez les permissions des utilisateurs, ne donnez que les permissions nécessaires.
5. Tests de sécurité réguliers
Utilisez des outils de test de sécurité des applications comme SAST, DAST ou IAST pour détecter les failles d’injection tôt.
Exemple dans le Monde Réel
Un site web de magasin en ligne a subi une violation où des attaquants ont utilisé une injection SQL dans un formulaire de connexion pour extraire les détails des cartes de crédit de sa base de données.

