防止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)
应该足够了。