将pg-promise与命名参数

时间:2016-08-23 21:06:01

标签: node.js pg-promise

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

1 个答案:

答案 0 :(得分:3)

  

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

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

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

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