【问题标题】:Node-MySQL - Escaping in Query() Method vs Mysql.Escape() / Mysql.EscapeId()Node-MySQL - 在 Query() 方法中转义与 Mysql.Escape() / Mysql.EscapeId()
【发布时间】:2014-08-04 21:41:53
【问题描述】:

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

虽然query() 自动转义了一些危险字符,但您仍然应该调用mysql.escape()mysql.escapeId() 来转义其他危险字符。

这是正确的吗?如果是这样,query()方法可以自动防护哪些SQL注入攻击,调用mysql.escape()mysql.escapeId()可以自动防护哪些SQL注入攻击?

【问题讨论】:

    标签: node.js express node-mysql


    【解决方案1】:

    不,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) {
      // ...
    });
    

    【讨论】:

    • 如果你使用占位符,字符串会自动转义?
    • 我知道已经晚了,但是,是的。使用占位符会自动转义字符串。在内部它仍在使用转义 btw
    【解决方案2】:

    这就是如何逃避 INSERT VALUES() 因为所有的例子都是用 ?对于 SET 方法,为了转义以逗号分隔的 VALUES(Data,Data),您可以使用模板字符串。当数据为空时也会转义命令,将其替换为 NULL

    (`INSERT INTO data VALUES (NULL,${c.escape(data.Name)},${c.escape(data.age)},${c.escape(data.emptystring)})`,
    //INSERT INTO data VALUES (NULL,'Adam',24,NULL})
    

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 1970-01-01
      • 2015-09-15
      • 2020-05-09
      • 2018-10-20
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多