🔐 Sécurité · Web et échanges
Injection SQL
Une injection SQL survient quand une application colle du texte fourni par l'utilisateur dans une requête SQL : l'attaquant peut alors en changer le sens.
Code : "SELECT * FROM users WHERE name = '" + saisie + "'"
Saisie : ' OR '1'='1
Requête : … WHERE name = '' OR '1'='1' ← toujours vraiConséquences
Lire des données qui ne devraient pas l'être, contourner une connexion, modifier ou supprimer des tables, parfois exécuter des commandes.
La parade n°1 : les requêtes paramétrées
Le texte est transmis comme donnée, jamais interprété comme du code. Exemple (Node.js) : db.prepare('SELECT * FROM users WHERE name = ?').get(saisie). Ne concatène jamais.
En complément
- Valider le type et la longueur des entrées
- Un compte de base de données aux droits limités
- Des messages d'erreur génériques (pas de détails SQL)
- Un ORM bien utilisé
Même famille
Le principe vaut pour toute injection : commandes shell, HTML/JavaScript (XSS), LDAP… La règle : séparer le code des données.
Jamais de concaténation : toujours des paramètres (?).
Teste-toi
Quelle est la meilleure parade contre l'injection SQL ?
- Masquer les messages d'erreur
- Utiliser des requêtes paramétrées
- Interdire le mot SELECT
- Limiter la longueur des champs
Réponse : B. Utiliser des requêtes paramétrées
Avec des paramètres, la saisie reste une donnée et n'est jamais interprétée comme du code SQL.
Plus de questions dans Discord avec /qcm matiere:securite.
Pour aller plus loin
Fiche mise à jour le 6 novembre 2026. Une erreur, une précision à proposer ? Écris-nous.