在JavaScript Node.js中防止SQL注入

问题描述 投票:4回答:3

我正在使用Node.js创建一个Discord机器人。我的一些代码如下。

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 是不安全的方式。如何才能做到这一点?举个例子?

javascript mysql sql node.js sql-injection
3个回答
9
投票

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

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

如果准备好的语句不是一个选项(我不知道为什么不是),防止SQL注入的一个穷人的方法是转义所有用户提供的输入,如这里所述。https:/www.owasp.orgindex.phpSQL_Injection_Prevention_Cheat_Sheet#MySQL_Escaping


1
投票

使用准备好的查询。

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

你可以找到更多信息 此处.


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.