É possível evitar injeções de SQL em Node.js (de preferência com um módulo) da mesma forma que o PHP preparou instruções que protegem contra eles.
Se sim, como? Se não, quais são alguns exemplos que podem ignorar o código que forneci (veja abaixo).
Algum Contexto:
Estou fazendo um aplicativo da web com uma pilha de back-end que consiste em Node.js + MySql usando o módulo node-mysql . Do ponto de vista da usabilidade, o módulo é ótimo, mas ainda não implementou algo semelhante às instruções preparadas do PHP (embora esteja ciente de que está no todo ).
Do meu entendimento, a implementação de instruções preparadas em PHP, entre outras coisas, ajudou muito na prevenção de injeções de SQL. Estou preocupado, porém, que meu aplicativo node.js possa estar aberto a ataques semelhantes, mesmo com o escape de string fornecido por padrão (como no trecho de código abaixo).
node-mysql parece ser o conector mysql mais popular para node.js, então eu queria saber o que outras pessoas podem estar fazendo (se algo) para explicar este problema - ou se é mesmo um problema com node.js para começar (não tenho certeza de como isso não seria, uma vez que a entrada do lado do usuário / cliente está envolvida).
Devo mudar para node-mysql-native por enquanto, já que ele fornece instruções preparadas?Estou hesitante em fazer isso, porque não parece ser tão ativo quanto node-mysql (embora isso possa significar apenas que está completo).
Aqui está um trecho do código de registro do usuário, que usa o módulo sanitizer , junto com a sintaxe de instrução preparada do node-mysql (que, como mencionei acima, faz escape de caractere), para evitar scripts entre sites e injeções de sql, respectivamente:
// Prevent xss
var clean_user = sanitizer.sanitize(username);
// assume password is hashed already
var post = {Username: clean_user, Password: hash};
// This just uses connection.escape() underneath
var query = connection.query('INSERT INTO users SET ?', post,
function(err, results)
{
// Can a Sql injection happen here?
});