← Retour à la référence SQL

INJECTION SQL

Catégorie : sécurité

Technique d'attaque où un pirate insère du code SQL malveillant dans une requête, en exploitant une concaténation non sécurisée de chaînes de caractères. Cela peut permettre de lire, modifier ou supprimer des données sans autorisation.

📝 Syntaxe

N/A (Vulnérabilité)

💡 Exemples

Vulnérable : requete = "SELECT * FROM users WHERE login='" + input_login + "' AND password='" + input_pwd + "'"
Si input_login = "admin' --", la requête devient : SELECT * FROM users WHERE login='admin' --' AND password='...'
Sécurisé (avec requêtes paramétrées) : "SELECT * FROM users WHERE login=? AND password=?" puis liaison des paramètres (input_login, input_pwd).
Le SGBD traite les entrées comme des données, pas du code.

🎯 Exercice

Soit la requête vulnérable : "DELETE FROM messages WHERE id=" + input_id. Quelle valeur de 'input_id' permettrait de supprimer TOUS les messages ?

Voir la solution
input_id = "1 OR 1=1". La requête devient : DELETE FROM messages WHERE id=1 OR 1=1, ce qui supprime toutes les lignes car 1=1 est toujours vrai.

⚠️ Pièges courants

  • Penser qu'échapper les guillemets est suffisant (les requêtes paramétrées sont la seule méthode fiable).
  • Croire que l'injection n'est possible que sur les champs de mot de passe (tout paramètre non contrôlé est vulnérable).
Pixel