flawopen.com/Injection SQL/Javascript
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.
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.
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.// 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];
}
// 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];
}
Le pilote envoie la requête et les arguments séparément, empêchant l'altération de l'AST SQL.
mysql2 utilise ? alors que pg (PostgreSQL) exige $1, $2.
L'échappement manuel est fragile face aux encodages complexes; la paramétrisation est la seule vraie protection.
grep -rn "query(\`.*\${" --include="*.js" --include="*.ts" .
npx eslint --rule 'no-template-curly-in-string: error' .
p/javascript ruleset in CI to catch unparameterized database queries automatically.Oui pour l'API standard, non pour les requêtes brutes sans paramètres.