【问题标题】:Sequelize: escape string in a literal stringSequelize:在文字字符串中转义字符串
【发布时间】:2020-02-24 14:48:27
【问题描述】:

我可以在 Sequelize 中使用literal 手动构建 SQL 查询部分:

sequelize.literal(`"foo".bar ILIKE '%baz%'`)

但是如果我想在这个文字块中添加一个var,我现在引入SQL注入漏洞:

sequelize.literal(`"foo".name ILIKE '%${myVar}%'`)

是否有 Sequelize 方法来保护文字块中的变量?

【问题讨论】:

    标签: javascript sql sequelize.js sql-injection


    【解决方案1】:

    你可以使用escape:

    const escapedSearch = sequelize.escape(`%${myVar}%`);
    sequelize.literal(`"foo".name ILIKE ${escapedSearch}`);
    

    见:https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-method-escape

    【讨论】:

      【解决方案2】:

      您可以使用replacements? 来避免sql 注入:

      sequelize.query(`"foo".name ILIKE '%?%'`,
        { replacements: [myVar], type: sequelize.QueryTypes.SELECT }
      )
      

      【讨论】:

        【解决方案3】:

        试试

        description = {
            $like: sequelize.literal(`${myVar} ESCAPE '\\'`)
        };
        

        【讨论】:

          猜你喜欢
          • 2019-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-05
          相关资源
          最近更新 更多