代码之家  ›  专栏  ›  技术社区  ›  Paul

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

  •  2
  • Paul  · 技术社区  · 7 年前

    package documentation :

    为了避免SQL注入攻击,在SQL查询中使用任何用户提供的数据之前,应始终对其进行转义。您可以使用mysql来实现这一点。escape(),连接。escape()或pool。escape()方法。

    我找不到任何关于在mysql中使用预处理语句的文档/参考,除了在使用“?”的参考中字符。它声明如下:

    这类似于MySQL中的预处理语句, 然而它真的

    仅限 从节点执行mysql查询的安全方法。然而,正如您在mysql包中看到的那样,对预处理语句没有明显的支持。然而,有人指出,他们避免SQL注入的方法是通过使用转义函数。

    我的问题是:

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Bill Karwin    7 年前

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

    如果是节点。js库使其与参数一样方便,但在内部通过修改查询字符串、替换 ?

    值得一提的是,Python的MySQL驱动程序也可以做到这一点,当“emulate prepares”选项生效时,PHP的PDO扩展也可以做到这一点。只要这些库经过良好测试,它就应该是安全的。

    价值观 可以与SQL查询结合使用。您无法保护标识符(如表名或列名)、SQL关键字或表达式等。在这些情况下,在将任何动态内容与SQL查询组合之前,请注意您已经检查过了。

    另请参见: