flawopen.com/Injection SQL/Javascript

Injection SQL in Javascript

Critique CWE-89 Draft — pending review
Language: English Português (Brasil) Español Français Deutsch Русский 简体中文 日本語 हिन्दी 한국어 Bahasa Indonesia
Explication simple

Imaginez un guichet où l'on attend un numéro. L'injection SQL se produit lorsqu'un fraudeur injecte une formule magique qui force le guichetier à vider tous les tiroirs.

Termes clés sur cette page
Template literal
Chaînes entre accents graves (`...`). Utilisées en SQL, elles équivalent à une concaténation non sécurisée.

Ce qui se passe

L'injection SQL se produit lorsque des entrées utilisateur non filtrées sont concaténées directement dans le texte de la requête.

Impact dans le monde réel

TalkTalk a été condamné en 2016 à une amende de 400 000 £ suite à une fuite de 150 000 comptes causée par une injection SQL basique.

Source : UK Information Commissioner's Office, 2016.

Vulnérable vs corrigé

VULNERABLE
// userId comes straight from request query
async function getUser(pool, userId) {
  const query = `SELECT * FROM users
    WHERE id = ${userId}`;
  const [rows] = await pool.query(query);
  return rows[0];
}
FIXED
// value is passed separately, never inlined
async function getUser(pool, userId) {
  const [rows] = await pool.query(
    'SELECT * FROM users WHERE id = ?',
    [userId]
  );
  return rows[0];
}

Pourquoi la correction fonctionne

Le pilote envoie la requête et les arguments séparément, empêchant l'altération de l'AST SQL.

Pièges spécifiques au langage

Syntaxe variable selon le pilote

mysql2 utilise ? alors que pg (PostgreSQL) exige $1, $2.

Idées reçues courantes

"Échapper les guillemets suffit"

L'échappement manuel est fragile face aux encodages complexes; la paramétrisation est la seule vraie protection.

Comment vérifier si vous êtes concerné

grep -rn "query(\`.*\${" --include="*.js" --include="*.ts" . npx eslint --rule 'no-template-curly-in-string: error' .
Run Semgrep with p/javascript ruleset in CI to catch unparameterized database queries automatically.

Liste de contrôle de prévention

Foire aux questions

ORM garantit-il la sécurité ?

Oui pour l'API standard, non pour les requêtes brutes sans paramètres.

Références

Voir aussi : Cross-Site Scripting Command InjectionPath Traversal