【问题标题】:"non-integer constant in ORDER BY" when using pg-promise with named parameters使用带有命名参数的 pg-promise 时出现“ORDER BY 中的非整数常量”
【发布时间】:2016-12-30 20:13:19
【问题描述】:

我正在尝试使用 pgp-promise 库编写一个简单的查询。我的原始实现如下所示:

var bar = function(orderBy){
  var qs = 'select * from mytable order by ${orderBy};';
  return db.many(qs,{orderBy:orderBy});
}
...
bar('id').then(...)

但这给出了non-integer constant in ORDER BY的错误 我还尝试在${orderBy} 周围添加引号并在 orderBy 参数中添加双引号无济于事。我通过var qs = 'select * from mytable order by "' + orderBy + '";' 得到了一个可行的解决方案,尽管我不希望在项目中使用这样的代码应该很明显。

我的问题:有没有办法让 pg-promise 构建一个带有不易受到 sql 注入攻击的 order by 子句的查询?

【问题讨论】:

    标签: node.js pg-promise


    【解决方案1】:

    有没有办法让 pg-promise 使用不易受到 sql 注入攻击的 order by 子句构建查询?

    ORDER BY 子句的值是一个 SQL 名称,它是使用 SQL Names 格式化的:

    const bar = function(orderBy) {
        const qs = 'select * from mytable order by ${orderBy:name}';
        return db.many(qs, {orderBy});
    }
    

    :raw / ^ 正在注入raw text,当它来自外部时很容易受到 SQL 注入的攻击,并且仅用于在服务器内部创建和预格式化的字符串。

    【讨论】:

    • 正是我想要的。谢谢
    猜你喜欢
    • 2021-07-24
    • 2017-11-18
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多