PostgreSQL 查询中美元参数的正确语法是什么?

问题描述 投票:0回答:1

我正在努力寻找美元参数的正确语法。有时有效,有时无效。

我正在使用 NodeJS 的“pg”包,但由于据我所知解析查询发生在服务器端,所以我认为这并不重要。

代码:

const client: PoolClient = ...;
await client.query('SELECT \'foo\' = $1', [projectId]);
await client.query('SET "gvc.currentProjectId" = $1', [projectId]);

第一个查询显然没用,但我添加它是为了尝试语法。第二个查询中出现错误,因此第一个查询似乎有效。第二个失败了:

unexpected exception error: syntax error at or near "$1"

是否可以在 SET 的值中使用美元参数?我想保护我的应用程序免受 SQL 注入攻击,因此手动转义 projectId 是最后的手段。

node.js postgresql parameters sql-injection
1个回答
0
投票

正如https://dba.stackexchange.com/a/333947中所解释的,SET确实只能采用文字值,没有参数或查询结果。该帖子链接到 set_config 命令,该命令没有这样的限制。

https://pgpedia.info/s/set_config.html

帖子和文档都没有解释为什么两者都存在,也没有解释为什么 SET 不能接受参数,因为 set_config 表明可以这样做。

只需使用 set_config 而不是 SET 即可解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.