什么是防止node-mysql中的SQL注入的最佳实践?

关于这个主题已经有了一些讨论(例如, 在Node.js中阻止SQL注入 ),但是没有明确的清晰度或深入的讨论,更不用说在任何地方都有很好的文档了。 node-mysql文档讨论防止SQL注入和一些转义函数。 但是,目前还不清楚这些函数如何防止SQL注入。 手册说“string安全地逃脱了”。 没有更多…是仅限于逃脱一些字符?

在node-mysql中似乎还有其他一些与connection.escape和pool.escape中的函数相同的函数,并且再次强调了这些函数用于防止SQL注入。

在node-mysql中似乎也不支持真正的准备语句。 这个计划和文件再次不清楚。 Node-mysql显然是node.js环境中非常受欢迎的模块,至less在我有限的经验中是相当稳定的。 什么是防止在node-mysql中进行SQL注入的最佳实践?

请记住,SQL注入是由恶意string被解释为命令而不是通过阻止命令引起的。 你确定你得到原来的string,而不是string版本?

例如,这两者之间有很大的区别: "test""'test'"

通常只有有害的字符才能逃脱,剩下的则保持原样。

最好避免使用低级驱动程序。 尝试使用像Sequelize这样的库来提供一些抽象和更多的支持。 该模块支持占位符语句,这些语句通常可以逃避非问题,它会自动处理。

有关replace的原始查询,请参阅以下部分:

 sequelize.query('SELECT * FROM projects WHERE status = ?', { replacements: ['active'], type: sequelize.QueryTypes.SELECT } ).then(function(projects) { console.log(projects) }) 

没有任何用户数据泄漏的风险,因为您已经将其作为正确处理的显式值提供,而不是查询中的内联string。

仍然继续是脆弱的

 db.query('SELECT Desc FROM Items WHERE Username IN (:names)', { replacements: { names: ["Bobby", "'); DELETE FROM Items WHERE 1=1; --')"] } });