【发布时间】:2017-09-22 01:10:22
【问题描述】:
根据Node.js的mysqlpackage documentation:
为了避免 SQL 注入攻击,在 SQL 查询中使用任何用户提供的数据之前,您应该始终对其进行转义。您可以使用 mysql.escape()、connection.escape() 或 pool.escape() 方法来执行此操作。
我找不到任何关于在 mysql 中使用准备好的语句的文档/参考,除了使用“?”的参考。人物。它声明如下:
或者,您可以使用 ?字符作为您想要转义的值的占位符...
这看起来类似于 MySQL 中的预处理语句,但实际上 只是在内部使用相同的 connection.escape() 方法。
根据我与其他开发人员交谈的经验,开发人员社区的普遍共识是,prepared statements 是从 Node.js 执行 mysql 查询的唯一安全方式,正如您所见mysql 包中,没有明显支持prepared statements。但是,表明他们避免SQL注入的方法是通过使用转义函数。
我的问题:
mysql 包中的转义函数是否足以安全地查询 mysql 数据库(不使用准备好的语句)?
【问题讨论】:
标签: mysql node.js function prepared-statement sql-injection