flawopen.com/SQL Injection em JavaScript/TypeORM
O QueryBuilder do TypeORM é seguro contra SQL Injection?
Um parâmetro vinculado é como um campo rotulado em um formulário: o TypeORM envia o valor separadamente, mantendo-o como dado, não como instrução SQL. O QueryBuilder vincula parâmetros nomeados quando são fornecidos à parte. Interpolar a entrada na condição a transforma em texto SQL.
userRepo.createQueryBuilder("u")
.where(`u.id = ${userId}`)
.getOne()
userRepo.createQueryBuilder("u")
.where("u.id = :id", { id: userId })
.getOne()
Vincule valores; limite a estrutura da consulta
QueryBuilder.where() aceita uma condição com placeholders nomeados, como :id, e um objeto de parâmetros separado. Use nomes distintos para valores diferentes; o TypeORM alerta que reutilizar um nome pode sobrescrever seu valor. Não interpole entrada do usuário na condição. Métodos raw, como dataSource.query(), também aceitam placeholders específicos do driver com valores passados separadamente. Parâmetros vinculam dados, não nomes de tabelas ou colunas, ordenação ou SQL arbitrário. Mapeie estruturas selecionáveis para expressões fixas da aplicação.
Como auditar a construção de consultas
rg -n '(\.where\(|\.query\(|\.sql)' --glob '*.ts' .Perguntas frequentes
Opções find comuns passam valores pela construção de consultas do TypeORM, mas revise operadores personalizados, expressões SQL raw e strings montadas pela aplicação. Parametrização evita injeção na sintaxe, mas não concede acesso a registros nem valida o significado de um valor.
Referências
- Documentação TypeORM — consultas raw do DataSource e parâmetros
- OWASP — Prevenção de SQL Injection
- Documentação TypeORM — QueryBuilder de seleção e parâmetros
- flawopen.com — SQL Injection em JavaScript