Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Quais são as melhores práticas para evitar injeção de SQL no node-mysql?


Lembre-se de que as injeções de SQL são causadas por strings hostis interpretadas como comandos, não por comandos de bloqueio. Você tem certeza de que está recebendo a string original de volta, não uma versão com string?

Por exemplo, há uma grande diferença entre esses dois:"test" e "'test'" .

Geralmente, apenas caracteres prejudiciais são escapados, o restante é deixado como está.

É melhor evitar o uso do driver de baixo nível. Experimente e use uma biblioteca como Sequelize para fornecer alguma abstração e mais suporte. Esse módulo suporta instruções de espaço reservado que geralmente tornam o escape um não-problema, ele é tratado automaticamente.

Consulte a seção sobre consultas brutas com substituições onde você tem a capacidade de fazer isso:
sequelize.query('SELECT * FROM projects WHERE status = ?',
  { replacements: ['active'], type: sequelize.QueryTypes.SELECT }
).then(function(projects) {
  console.log(projects)
})

Não há risco de vazamento de dados do usuário porque você os forneceu como um valor explícito que é tratado corretamente, não como uma string embutida na consulta.