💉
securite

Injection SQL

Vulnerabilite permettant d'executer du SQL malveillant via les inputs utilisateur.

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

Besoin d'aide technique ?

Decrivez votre projet pour des conseils personnalises par nos experts.

Recevoir des conseils

Questions frequentes

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 liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.