首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中的转义函数是否足以安全地查询Node.js数据库(无需使用准备好的语句)?

mysql中的转义函数是否足以安全地查询Node.js数据库(无需使用准备好的语句)?
EN

Stack Overflow用户
提问于 2017-09-22 01:10:22
回答 1查看 1.2K关注 0票数 2

根据Node.js的mysql 包装文件

为了避免SQL注入攻击,在SQL查询中使用任何用户提供的数据之前,您都应该避免使用它。您可以使用mysql.escape()、connection.escape()或pool.escape()方法这样做。

我找不到任何关于在mysql中使用准备好的语句的文档/引用,除了提到使用'?‘人物。它规定如下:

或者,你可以用?字符作为您希望转义的值的占位符..。 这看起来类似于MySQL中准备好的语句,但是实际上只是在内部使用相同的connection.escape()方法。

根据我与其他开发人员交谈的经验,开发人员社区的普遍共识是,准备好的语句是执行来自的Node.js查询的唯一安全方法,但是,正如您在mysql包中看到的那样,对于准备好的语句没有明显的支持。然而,它们避免SQL注入的方法是通过使用转义函数来实现的。

我的问题:

mysql包中的转义函数是否足以安全地查询mysql数据库(无需使用准备好的语句)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 01:25:23

转义实际上和使用参数化查询一样安全,如果您一直这样做的话。

但是建议使用参数,因为它使代码更简单。因此,开发人员可能更有可能这样做。

如果Node.js库使它与参数一样方便,但是通过修改查询字符串在内部实现它,用参数值替换?标记,那么您就可以了。

至于它的价值,Python的MySQL驱动程序也是这样做的,当“模拟准备”选项生效时,还可以使用PHP扩展。只要这些库经过良好的测试,它就应该是安全的。

FWIW,无论是转义还是参数,在SQL注入预防中都是有限的,因为在这两种情况下,您只能保护与SQL查询相结合的值。您不能保护标识符(如表名或列名)、SQL关键字或表达式等。在这些情况下,请注意,在将任何动态内容与SQL查询结合之前,您必须先对其进行检查。

另请参阅:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46355382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档