nodejs mysql模块是否为我们进行了转义?如果不是那么如何消毒?

时间:2014-02-28 07:48:19

标签: mysql node.js sql-injection

我是Node.js的新手,不知道如何处理sql注入? 我在Node.js中的代码如下所示:

connection.query('SELECT email FROM users WHERE firstName LIKE \'%'+firstName+'%\';', function (error, rows, fields){ someCodeHere... }

我直接从用户接收输入并将其放在查询中。我更关注sql注入吗? Node.js进行消毒吗?如何防止Node.js中的sql注入?


编辑:
在上面提供的链接中,据说我们应该使用:

connection.escape(query);

我应该把它放在另一个变量中,或者我的代码应该如下所示:

connection.escape(query);
connection.query('SELECT email FROM users WHERE firstName LIKE \'%'+firstName+'%\';', function (error, rows, fields){ someCodeHere... }

1 个答案:

答案 0 :(得分:3)

我建议使用执行escaping?占位符。

var query = 'SELECT email FROM users WHERE firstName LIKE \'%?%\';';
connection.query(query, [firstName], function (error, rows, fields){
  //someCodeHere... 
});

此外,您可能希望multipleStatements设置为true。默认情况下它是错误的,但正如自述文件中所述,它易受SQL注入的影响。当输入被转义时是否就是这种情况,我不确定。

  

multipleStatements:每个查询允许多个mysql语句。小心这一点,它会让你暴露于SQL注入攻击。 (默认值:false)