3

我正在尝试使用 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 子句的查询?

4

1 回答 1

4

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

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

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

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

于 2016-08-24T05:54:57.790 回答