我对准备好的语句有更多的经验,并且我知道它们确实可以很好地抵御 SQL 注入(inject)攻击。
我想知道 pl/pgsql 的 format/USING
和 quote_literal/quote_nullable
是否同样有效,因为准备好的语句也有一些漏洞(检查here 和 here )。
那么,pl/pgsql 的安全性与准备好的语句处于同一级别吗?我应该考虑自己的安全并用 format/USING
/quote_literal/quote_nullable
覆盖还是我必须做更多的事情才能更安全?
最佳答案
PL/pgSQL 中的
EXECUTE
和 USING
对于 SQL 注入(inject)是 100% 安全的。
您引用的示例不相关。
只有正确使用,引用才是安全的。这就是为什么它不如使用参数的原因。
使用 USING
的占位符语句将作为准备好的语句进行处理,并且为 USING
提供的参数将成为准备好的语句的参数。参数中的文本永远不会被解析为 SQL 语句的一部分,因此 SQL 注入(inject)是不可能的。
关于postgresql - pl/pgsql 与针对 SQL 注入(inject)攻击的准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48448377/