🔐 Sécurité🟡 Intermédiaire⏱ 1 min de lecture📂 🌐 Web et échanges

🔐 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.

Schéma
Code : "SELECT * FROM users WHERE name = '" + saisie + "'"
Saisie : ' OR '1'='1
Requête : … WHERE name = '' OR '1'='1'   ← toujours vrai

Consé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.

📌 À retenir

Jamais de concaténation : toujours des paramètres (?).

Teste-toi

Quelle est la meilleure parade contre l'injection SQL ?
  1. Masquer les messages d'erreur
  2. Utiliser des requêtes paramétrées
  3. Interdire le mot SELECT
  4. 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.