【问题标题】:How to escape in Sequelize?如何在 Sequelize 中逃脱?
【发布时间】:2017-10-31 13:00:26
【问题描述】:

我正在使用带有 Node.js/Express 的 Sequelize,但我不确定如何在 where 部分使用 Sequelize 进行转义。

var sequelize = ...;
var productId = 5; var productName = "test";
var product = sequelize.define('product',findAll({
       where: {
           $or: [
                {productId: this.mysql.escapeId(productId)},
                {productName: {$like: this.mysql.escapeId('%' + productName + '%')}},
            ]
       }
    })
   .then(result => ...);

这不起作用,我得到以下查询:

SELECT `productId`, `productName` FROM `product` AS `product` WHERE (`product`.`productId` = '`5`' OR `product`.`productName` LIKE '\'%test%\'' ORDER BY `product`.`productId` ASC

这没有给我任何结果。 那么如何使用 Sequelize 逃脱呢?我也尝试了函数 Sequelize.escape,但出现错误“TypeError: Sequelize.escape is not a function”。

如果由于 Sequelize 不需要转义这些值,我不明白它如何在 SQL 注入攻击中保持安全。 示例:productId = '5;从某事中删除 *;'

非常感谢您的帮助!

祝你有美好的一天,

凡妮莎

【问题讨论】:

    标签: sql escaping sequelize.js code-injection


    【解决方案1】:

    这种情况不用逃,Sequelize就行。

    【讨论】:

      【解决方案2】:

      正如@FiftiN 在他的回答中正确指出的那样,在大多数情况下,续集句柄都会转义。

      我需要手动转义的唯一实例是在编写原始 sql 查询时。 Sequelize 原始 sql 查询使用也被转义的占位符($ 或 ?):

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

      虽然在使用特殊的 sql 函数时,我发现有时手动转义更合适:

      var SqlString = require('sequelize/lib/sql-string')
      var input = SqlString.escape("'string'( \"value")
      sequelize.query(
          `SELECT * FROM projects WHERE regexp_matches("status", '^\'${input} *\\w*\'')`,
          {type: sequelize.QueryTypes.SELECT }
      )
      

      奇怪的正则表达式只是作为标准转义机制可能感觉笨拙的一个例子。该示例还使用了 ES6 模板字符串。

      我在https://github.com/sequelize/sequelize/issues/1132中找到了转义方法。

      警告:escape 方法需要额外的参数,例如 sql 方言。在依赖它之前,请确保您了解它的工作原理!此外,该方法可能会在未来的版本中更改或不再存在,因为它没有记录在官方文档中。

      【讨论】:

      • Sequelize 中替换的问题是引用了数值。
      猜你喜欢
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多