防止JavaScript /节点中的SQL注入

我正在使用Node.js创build一个不和谐的机器人。 我的一些代码如下所示:

var info = { userid: message.author.id } connection.query("SELECT * FROM table WHERE userid = '" + message.author.id + "'", info, function(error) { if (error) throw error; }); 

人们曾经说过,我放入message.author.id方式并不安全。 我怎样才能做到这一点? 一个例子?

最好的方法是使用准备好的语句或查询(链接到NPM mysql模块的文档: https : //github.com/mysqljs/mysql#preparing-queries )

 var sql = "SELECT * FROM table WHERE userid = ?"; var inserts = [message.author.id]; sql = mysql.format(sql, inserts); 

如果准备好的语句不是一个选项(我不知道为什么它不会),一个穷人的方式来防止SQL注入是逃避所有用户提供的input,如下所述: https : //www.owasp.org/的index.php / SQL_Injection_Prevention_Cheat_Sheet#MySQL_Escaping

使用准备的查询;

 var sql = "SELECT * FROM table WHERE userid = ?"; var inserts = [message.author.id]; sql = mysql.format(sql, inserts); 

你可以在这里find更多的信息。

以下是有关如何正确转义任何用户提供的数据以防止SQL注入的文档: https : //github.com/mysqljs/mysql#escaping-query-values 。 mysql.escape(userdata)应该足够了。