flawopen.com/Injeção de SQL/Javascript
Imagine um guichê que só espera um número de protocolo. A injeção de SQL acontece quando alguém digita uma frase mágica que faz o sistema revelar todos os protocolos salvos.
A injeção de SQL ocorre quando dados controlados pelo usuário são inseridos diretamente no texto da consulta ao banco de dados.
Em 2015, a TalkTalk teve mais de 150 mil contas expostas devido a uma injeção de SQL básica, recebendo multa de 400 mil libras.
Fonte: 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];
}
A versão segura separa a query dos valores, garantindo que os dados nunca sejam executados como código SQL.
mysql2 usa ? enquanto pg (PostgreSQL) usa $1, $2.
TypeScript apenas checa tipos em compilação; não altera a forma como a consulta é executada no banco.
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.Apenas nos métodos padrão. Em consultas brutas (raw), é obrigatório parametrizar manualmente.