我正在使用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
是不安全的方式。如何才能做到这一点?举个例子?
最好的方法是使用准备好的语句或查询(链接到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
使用准备好的查询。
var sql = "SELECT * FROM table WHERE userid = ?";
var inserts = [message.author.id];
sql = mysql.format(sql, inserts);
你可以找到更多信息 此处.
这里是关于如何正确转义任何用户提供的数据以防止SQL注入的文档。https:/github.commysqljsmysql#escaping-query-values。 .mysql.escape(userdata)
应该够了。