You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:含IF NOT EXISTS的PL/pgSQL函数是否存在SQL注入及防范方法

该PL/pgSQL函数是否存在SQL注入风险?

风险结论

这个函数不存在SQL注入风险,重点针对你关注的IF NOT EXISTS分支里的SELECT语句说明:
这里的WHERE signature = _sig是直接使用PL/pgSQL的参数变量,PostgreSQL会自动做参数化绑定处理——它会把_sig的内容当成纯数据,不会把里面的字符解析成SQL语句的一部分。哪怕传入恶意内容比如' OR 1=1 --,数据库也只会把它当作普通字符串去和signature字段做等值匹配,不会执行其中的SQL逻辑。

安全规范建议

虽然当前写法已经安全,还是可以遵循这些最佳实践进一步加固:

  • 永远用参数化变量传递用户输入,要是后续需要用EXECUTE编写动态SQL,必须用USING子句绑定参数,绝对不能直接拼接字符串。
  • 给参数添加类型和长度限制,比如把_sig text改成_sig varchar(255)(可根据实际业务调整长度),缩小不必要的输入范围。
  • 给函数设置最小必要权限,比如仅让它拥有records表的查询权限,避免权限过大带来的潜在风险。

内容的提问来源于stack exchange,提问作者sudoExclamationExclamation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:05:03