"non-integer constant in ORDER BY" 当使用带命名参数的 pg-promise 时
"non-integer constant in ORDER BY" when using pg-promise with named parameters
我正在尝试使用 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 子句的查询?
Is there a way to get pg-promise to build a query with an order by clause that isn't vulnerable to sql injection?
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 注入,并且仅用于具有已在服务器内创建并预先格式化。
我正在尝试使用 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 子句的查询?
Is there a way to get pg-promise to build a query with an order by clause that isn't vulnerable to sql injection?
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 注入,并且仅用于具有已在服务器内创建并预先格式化。