>Difficulté: Chef 10 min

Injection SQL : Ne laissez pas n'importe qui toucher à vos ingrédients

Chef Sedra
| 23 Nov 2025

Le Café et le Code

Quand je prépare mon café le matin, j'utilise un filtre V60. Pourquoi ? Parce que je veux extraire le meilleur du grain (les arômes) et laisser le reste (le marc) dehors.

Dans le développement Web, c'est pareil. Vos utilisateurs vous envoient des données (les grains). Si vous ne les filtrez pas, vous allez vous retrouver avec du marc dans votre base de données. Ou pire, un hacker dans votre cuisine.

L'Attaque : Le Client qui s'invite en Cuisine

Imaginez un formulaire de connexion classique. Le code PHP ressemble souvent à ça (ne faites pas ça chez vous) :

$query = "SELECT * FROM users WHERE username = '" . $username . "'";

Si je suis une utilisatrice polie, je rentre Sedra. La requête devient : SELECT * FROM users WHERE username = 'Sedra'

Mais si je suis d'humeur Red Team, je rentre : admin' UNION SELECT 1, 'hacker', 'password', 1 --

La requête devient alors :

SELECT * FROM users WHERE username = 'admin' 
UNION SELECT 1, 'hacker', 'password', 1 --'

Le -- met tout le reste en commentaire. Le UNION SELECT me permet de créer une fausse ligne de résultat. Boum. Je suis connectée sans mot de passe. C'est comme si j'avais commandé un espresso et que j'étais repartie avec la caisse enregistreuse.

La Solution : Prepared Statements (Le Filtre Ultime)

Pour éviter ça, on sépare la recette (la requête SQL) des ingrédients (les données). C'est ce qu'on appelle les Prepared Statements.

En Laravel (Eloquent), c'est natif :

// Eloquent prépare la requête pour vous
$user = User::where('username', $username)->first();

Si vous utilisez du SQL brut, faites ceci :

// Le '?' est un placeholder. La donnée ne sera jamais interprétée comme du code SQL.
$user = DB::select('SELECT * FROM users WHERE username = ?', [$username]);

Conclusion

Un code élégant est un code sécurisé. Ne laissez jamais vos variables se mélanger à votre logique SQL. Utilisez des filtres. Utilisez des Prepared Statements. Et buvez du bon café.