Definition
L'injection SQL est une vulnerabilite de securite qui permet a un attaquant d'inserer du code SQL malveillant dans les requetes d'une application, via les champs de saisie ou les parametres d'URL. C'est l'une des vulnerabilites les plus dangereuses et les plus courantes (OWASP Top 10 #3).
Une injection SQL reussie peut permettre de lire, modifier ou supprimer toutes les donnees de la base, voire prendre le controle du serveur.
Comment ca marche ?
Application vulnerable
# DANGEREUX : concatenation de strings
query = f"SELECT * FROM users WHERE email = '{user_input}' AND password = '{password}'"
Attaque
Si l'utilisateur entre comme email : ' OR '1'='1' --
La requete devient :
SELECT * FROM users WHERE email = '' OR '1'='1' --' AND password = ''
-- Le -- commente le reste → retourne TOUS les utilisateurs !
Autres exemples d'injection
-- Supprimer une table
'; DROP TABLE users; --
-- Lire d'autres tables (UNION-based)
' UNION SELECT username, password FROM admin_users --
-- Extraire des informations systeme
' UNION SELECT version(), current_database() --
Prevention : les requetes parametrees
La seule protection fiable est d'utiliser des requetes parametrees (prepared statements) :
# Python (psycopg2)
cursor.execute("SELECT * FROM users WHERE email = %s AND password = %s", (email, password))
// Node.js (postgres)
const result = await sql\`SELECT * FROM users WHERE email = ${email}\`;
// Java (PreparedStatement)
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE email = ?");
stmt.setString(1, email);
// PHP (PDO)
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
Autres protections
- ORM : les ORM modernes (Drizzle, Prisma, Eloquent) utilisent des requetes parametrees par defaut
- Validation des entrees : verifier le type et le format (mais ne remplace PAS les requetes parametrees)
- Moindre privilege : le compte SQL de l'app ne doit pas avoir les droits DROP, GRANT, etc.
- WAF : les Web Application Firewalls (Cloudflare, AWS WAF) detectent les patterns d'injection
Outils de detection
- sqlmap : outil open source de detection automatique d'injections SQL
- OWASP ZAP : scanner de vulnerabilites web
- Burp Suite : suite de test de securite web