Une injection SQL (SQL injection en anglais, ou SQLi) est une technique malveillante utilisée par des attaquants pour compromettre la sécurité d’une application web.
Elle consiste à insérer du code SQL malveillant dans les champs de saisie d’une application web afin de manipuler la base de données sous-jacente. Elle exploite les vulnérabilités dans la façon dont l’application traite les entrées utilisateur et construit ses requêtes SQL.
Une injection SQL est un des nombreux types d’injections malveillantes.
Fonctionnement
Le principe de base est le suivant :
- L’attaquant insère du code SQL malveillant dans un champ de saisie (formulaire, URL, etc.)
- L’application intègre ce code sans le filtrer correctement dans sa requête SQL
- La base de données exécute la requête modifiée, permettant à l’attaquant d’accéder ou de manipuler les données
👉 Exemples
Voici quelques exemples courants d’injections SQL :
- Contournement d’authentification :
sql
SELECT * FROM users WHERE username = 'admin' --' AND password = 'mot_de_passe'
- Le
--
commente la suite de la requête, permettant de se connecter sans mot de passe. - Extraction de données :
sql
SELECT * FROM users WHERE id = 1 UNION SELECT username, password FROM users --
- Cette injection permet de récupérer tous les noms d’utilisateurs et mots de passe.
💉 Comment y remédier
Plusieurs bonnes pratiques permettent de se protéger :
- Utiliser des requêtes paramétrées ou des procédures stockées
- Valider et filtrer toutes les entrées utilisateur
- Appliquer le principe du moindre privilège pour les comptes de base de données
- Utiliser des outils de détection et de prévention des injections SQL
- Former les développeurs aux bonnes pratiques de sécurité