Node-MySQL – Query()方法中的转义与Mysql.Escape()/ Mysql.EscapeId()

我目前正在使用node-mysql库将我的应用程序连接到一个MySQL实例。 在阅读了我发现的其他一些StackOverflow问题和文章之后,听起来就像每次调用query()方法时,node-mysql都会自动转义不安全的字符。 但是在一些代码片段中,我还看到在query()方法中调用了mysql.escape()mysql.escapeId()

这似乎是,虽然query()自动转义一些危险的字符,你仍然应该调用mysql.escape()mysql.escapeId()转义其他危险字符。

它是否正确? 如果是这样,什么样的SQL注入攻击被query()方法自动保护,通过调用mysql.escape()mysql.escapeId()来保护什么样的SQL注入攻击?

不, query()不会自动转义不安全的字符。

要安全地转义值,你需要使用mysql.escape() / mysql.escapeId()或者使用? 占位符如下所述:

https://github.com/felixge/node-mysql#escaping-query-values

 connection.query('SELECT * FROM users WHERE id = ?', [userId], function(err, results) { // ... });