postgresql - pl/pgsql 与针对 SQL 注入(inject)攻击的准备语句

标签 postgresql pdo prepared-statement sql-injection plpgsql

我对准备好的语句有更多的经验,并且我知道它们确实可以很好地抵御 SQL 注入(inject)攻击。

我想知道 pl/pgsql 的 format/USINGquote_literal/quote_nullable 是否同样有效,因为准备好的语句也有一些漏洞(检查herehere )。

那么,pl/pgsql 的安全性与准备好的语句处于同一级别吗?我应该考虑自己的安全并用 format/USING/quote_literal/quote_nullable 覆盖还是我必须做更多的事情才能更安全?

最佳答案

PL/pgSQL 中的

EXECUTEUSING 对于 SQL 注入(inject)是 100% 安全的。 您引用的示例不相关。

只有正确使用,引用才是安全的。这就是为什么它不如使用参数的原因。

使用 USING 的占位符语句将作为准备好的语句进行处理,并且为 USING 提供的参数将成为准备好的语句的参数。参数中的文本永远不会被解析为 SQL 语句的一部分,因此 SQL 注入(inject)是不可能的。

关于postgresql - pl/pgsql 与针对 SQL 注入(inject)攻击的准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48448377/

相关文章:

javascript - 如何将 Postgresql timestamptz 转换为 Javascript 日期?

PostgreSQL - 优化连接比较距离的纬度和经度

php - 我收到此错误代码 : Invalid argument supplied for foreach()

php - PDO 使用 prepade 语句获取数据

php - "Property access is not allowed yet"使用准备语句时的警告

PHP PDO 准备语句查询不更新记录

sql - Rails HABTM 查询——带有所有标签的文章

performance - Postgres HStore 对性能的影响是什么?

mysql - zend 表单将重复条目插入 "username"用户字段,即使我已经检查过是否存在?

php - PDO UTF-8 编码问题?