【问题标题】:Sails ORM: How to pass value with array in valuesToEscape parameterSails ORM:如何在 valuesToEscape 参数中使用数组传递值
【发布时间】:2017-02-03 06:49:01
【问题描述】:

我的 rawQuery 需要逗号分隔的字符串,但根据文档 here,第二个参数应该是一个数组:

一个动态的、不受信任的字符串数组,使用此模型数据库的适当模板语法进行 SQL 转义和注入 SQL 字符串。 (如果您没有要注入的动态值,则只需在此处使用一个空数组。)

var rawQuery = 'SELECT * FROM "user" WHERE "user"."email" IN ($1)';
User.query(rawQuery, ['a@a.com', 'b@b.com'], function (err, rawResult) {
  if (err) { return res.serverError(err); }
    return res.ok(rawResult.rows);
});

如何在不通过数组传递变量的情况下使该查询工作?我可以像这样直接添加变量

var rawQuery = 'SELECT * FROM "user" WHERE "user"."email" IN (' + foo +')';

但是会容易受到SQL注入攻击。

【问题讨论】:

    标签: postgresql sails.js sails-postgresql


    【解决方案1】:

    不使用参数注入模式直接运行查询,需要去掉SQL命令特殊字符,否则会如你所说的那样被注入攻击。

    有一些软件包可以为您做到这一点: 最受欢迎的是npm: sql-escapenpm sqlstring

    他们会将转义字符添加到您的字符串中的任何特殊字符:

    var escape = require('sql-escape');
    
    var result = escape('my sweet "string"'); 
    //result: 'my sweet \\"string\\"'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 2019-05-08
      • 2015-09-29
      相关资源
      最近更新 更多