Builders Academy
OWASP Top 10 — Vulnérabilités Web Critiques
1 of 3

Chapitre 1 · Leçon 1

SQL Injection

La vulnérabilité n°1 depuis 20 ans

Section 1

Comment fonctionne une SQLi

Step 1

L'exploitation

Une SQL Injection se produit quand une entrée utilisateur est directement concaténée dans une requête SQL. L'attaquant peut modifier la logique de la requête.

snippet.typescript

typescript
1// ❌ Code vulnérable — JAMAIS faire ça
2app.get('/user', async (req, res) => {
3  const email = req.query.email; // Contrôlé par l'attaquant
4
5  // Requête construite par concaténation
6  const query = `SELECT * FROM users WHERE email = '${email}'`;
7
8  // Si email = "' OR '1'='1" :
9  // SELECT * FROM users WHERE email = '' OR '1'='1'
10  // → Retourne TOUS les utilisateurs !
11
12  // Si email = "'; DROP TABLE users; --" :
13  // SELECT * FROM users WHERE email = ''; DROP TABLE users; --'
14  // → Supprime la table users !
15
16  // Si email = "' UNION SELECT id, password, email FROM admins --" :
17  // → Fuite de la table admins !
18
19  const users = await db.query(query);
20  res.json(users);
21});

Step 2

Prévention — Prepared Statements

La protection fondamentale : ne jamais concaténer des données utilisateur dans du SQL. Utiliser des paramètres liés (prepared statements) ou un ORM.

snippet.typescript

typescript
1// ❌ Code vulnérable — JAMAIS faire ça
2app.get('/user', async (req, res) => {
3  const email = req.query.email; // Contrôlé par l'attaquant
4
5  // Requête construite par concaténation
6  const query = `SELECT * FROM users WHERE email = '${email}'`;
7
8  // Si email = "' OR '1'='1" :
9  // SELECT * FROM users WHERE email = '' OR '1'='1'
10  // → Retourne TOUS les utilisateurs !
11
12  // Si email = "'; DROP TABLE users; --" :
13  // SELECT * FROM users WHERE email = ''; DROP TABLE users; --'
14  // → Supprime la table users !
15
16  // Si email = "' UNION SELECT id, password, email FROM admins --" :
17  // → Fuite de la table admins !
18
19  const users = await db.query(query);
20  res.json(users);
21});

Topics and skills covered

  • Sécurité
  • SQL Injection
  • Prepared Statements
  • ORM