Est-il possible d'empêcher les injections SQL dans Node.js (de préférence avec un module) de la même manière que PHP avait préparé des instructions qui les protégeaient.
Si c'est le cas, comment? Sinon, quels sont quelques exemples qui pourraient contourner le code que j'ai fourni (voir ci-dessous).
Un certain contexte:
Je crée une application Web avec une pile back-end composée de Node.js + MySql en utilisant le module node-mysql . Du point de vue de la convivialité, le module est génial, mais il n'a pas encore implémenté quelque chose qui ressemble aux instructions préparées de PHP (bien que je sache que c'est sur le todo ).
D'après ce que je comprends, l'implémentation par PHP d'instructions préparées, entre autres, a grandement contribué à la prévention des injections SQL. Je crains cependant que mon application node.js ne soit ouverte à des attaques similaires, même avec la chaîne d'échappement fournie par défaut (comme dans l'extrait de code ci-dessous).
node-mysql semble être le connecteur mysql le plus populaire pour node.js, donc je me demandais ce que d'autres personnes pourraient faire (le cas échéant) pour expliquer ce problème - ou si c'est même un problème avec node.js pour commencer (je ne sais pas comment cela ne serait pas, car l'entrée côté utilisateur / client est impliquée).
Dois-je passer à node-mysql-native pour le moment, car il fournit des instructions préparées? J'hésite à le faire, car il ne semble pas être aussi actif que node-mysql (bien que cela puisse simplement signifier qu'il est complet).
Voici un extrait de code d'enregistrement de l'utilisateur, qui utilise le module sanitizer , ainsi que la syntaxe de type instruction préparée de node-mysql (qui, comme je l'ai mentionné ci-dessus, échappe les caractères), pour empêcher respectivement les scripts intersites et les injections sql:
// 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?
});