当用户输入是节点 postgres 中的模式名称时清理用户输入
Sanitizing user inputs when the user input is a schema name in node postgres
我正在使用 https://node-postgres.com/ 编写一个相当简单的应用程序,但我确实有一个复杂的约束导致我出现问题。即,我需要我的 SQL 语句 select 基于用户输入的模式
SELECT * FROM {some user value}.tableName
但是当我尝试正常参数化它时,出现语法错误
{"errorType":"error","errorMessage":"syntax error at or near \"\""
这似乎表明该值未按预期替换。
有没有办法在不在查询中执行传入值的情况下清理传入值?或者是否有适当的方法以正确执行的方式在查询中参数化此值?
(为了满足我的基本需求,我想避免对类似 sequilize 的库进行大的更改)
事实证明,有一个很好的方法可以利用图书馆的胆量来做到这一点!它深入到原型中,所以如果这成为更常规的事情,那么研究 pg-format 之类的东西可能是一个不错的选择。但目前这可行。
const sanitizedKey = db.Client.prototype.escapeIdentifier(incomingData.orgKey)
const result = await db.query(builder(`
WITH policies_threatened_by_incident AS (
select p.alert_id, p.tiv, p.distance
from ${sanitizedKey}.wf_alert_policies_active p
...
向有帮助的贡献者大声疾呼 -> https://github.com/brianc/node-postgres/issues/2295#issuecomment-664767339
我正在使用 https://node-postgres.com/ 编写一个相当简单的应用程序,但我确实有一个复杂的约束导致我出现问题。即,我需要我的 SQL 语句 select 基于用户输入的模式
SELECT * FROM {some user value}.tableName
但是当我尝试正常参数化它时,出现语法错误
{"errorType":"error","errorMessage":"syntax error at or near \"\""
这似乎表明该值未按预期替换。
有没有办法在不在查询中执行传入值的情况下清理传入值?或者是否有适当的方法以正确执行的方式在查询中参数化此值?
(为了满足我的基本需求,我想避免对类似 sequilize 的库进行大的更改)
事实证明,有一个很好的方法可以利用图书馆的胆量来做到这一点!它深入到原型中,所以如果这成为更常规的事情,那么研究 pg-format 之类的东西可能是一个不错的选择。但目前这可行。
const sanitizedKey = db.Client.prototype.escapeIdentifier(incomingData.orgKey)
const result = await db.query(builder(`
WITH policies_threatened_by_incident AS (
select p.alert_id, p.tiv, p.distance
from ${sanitizedKey}.wf_alert_policies_active p
...
向有帮助的贡献者大声疾呼 -> https://github.com/brianc/node-postgres/issues/2295#issuecomment-664767339