💉
securite

Injection SQL

Vulnérabilité permettant d'exécuter du SQL malveillant via les inputs utilisateur.

Définition

L'injection SQL est une vulnérabilité de sécurité qui permet à un attaquant d'insérer du code SQL malveillant dans les requêtes d'une application, via les champs de saisie ou les paramètres d'URL. C'est l'une des vulnérabilités les plus dangereuses et les plus courantes (OWASP Top 10 #3).

Une injection SQL reussie peut permettre de lire, modifier ou supprimer toutes les données de la base, voire prendre le contrôle du serveur.

Comment ca marche ?

Application vulnérable

# 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 requête 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() --

Prévention : les requêtes paramétrées

La seule protection fiable est d'utiliser des requêtes paramétrées (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 requêtes paramétrées par défaut
  • Validation des entrées : vérifier le type et le format (mais ne remplace PAS les requêtes paramétrées)
  • 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 détection

  • sqlmap : outil open source de détection automatique d'injections SQL
  • OWASP ZAP : scanner de vulnérabilités web
  • Burp Suite : suite de test de sécurité web

Besoin d'aide technique ?

Decrivez votre projet pour des conseils personnalises par nos experts.

Recevoir des conseils

Questions fréquentes

Les ORM protegent-ils contre l'injection SQL ?
Oui, les ORM modernes (Drizzle, Prisma, Eloquent, Hibernate) utilisent des requetes parametrees par defaut. Mais attention aux fonctions de raw query qui peuvent etre vulnerables si mal utilisees.
Comment detecter les injections SQL dans mon code ?
Utilisez un SAST (Static Application Security Testing) comme Semgrep, SonarQube ou Snyk Code. Ils detectent les concatenations de strings dans les requetes SQL. En test, utilisez sqlmap.
L'injection SQL est-elle encore courante en 2026 ?
Oui, malheureusement. C'est toujours dans l'OWASP Top 10. Les frameworks modernes aident, mais du code legacy non protege existe dans de nombreuses organisations.

Pages liées

Chaque semaine, le meilleur de la tech française

Tendances, salaires, outils et opportunités — directement dans votre boîte mail.

Gratuit. Desabonnement en un clic. Pas de spam.