php - 如何关闭 postgres 中的多个语句?

标签 php sql postgresql sql-injection

我认为像这样关闭多个语句以防止这种类型的 sql 注入(inject)是个好主意。 多语句示例:

$query = "UPDATE authors SET author=UPPER(author) WHERE id=1;";
$query .= "UPDATE authors SET author=LOWER(author) WHERE id=2;";
$query .= "UPDATE authors SET author=NULL WHERE id=3;";

pg_query($conn, $query);

是否可以防止在 posgresql 设置中使用多个语句,或者例如使用 posgre 的相关 PHP 代码?

或者也许有任何方法可以在将 SQL 查询传递给 pg_query 之前对其进行解析,以便检测包含多个语句的查询?

最佳答案

不,没有办法在 PostgreSQL 中禁用多语句。据我所知,在 PHP Pg 或 PDO PostgreSQL 驱动程序中也没有任何方法可以做到这一点。

无论如何,它们不是您的问题。禁用多语句可能是(轻微的)SQL 注入(inject)危害缓解,但它不会是任何真正的保护。例如,考虑可写 CTE 或限定符删除攻击。

相反,首先要妥善保护您的代码。严格使用参数化语句而不是字符串连接,因此首先没有 SQL 注入(inject)机会。避免 SQL 注入(inject)并不难,您只需要对您的编码实践有点理智。

对所有查询使用 PDO 或 pg_query_params,并确保不要将来自直接范围之外的文本直接连接到 SQL 文本中,使用参数。即使它来自应用程序的其他地方并被认为是“可信的”……以后的重构可能会改变这一点。

关于php - 如何关闭 postgres 中的多个语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22530585/

相关文章:

php - 将 https 与 elasticsearch-php 客户端一起使用

php - Mysql group_concat 与 unique 和 where 给出奇怪的结果

mysql - 为 MySQL 中的临时表授予选择

mysql - 如何编写递归 MySQL 查询来连续跟踪项目管理任务记录

MySQL Join、Select、多个条件

sql - 使用普通字段分组

sql - 如何对具有重置条件的列进行 SUM()?

php - 是否可以使用 cURL 使用 POST 流式上传文件?

php - 如何在 Laravel 5.6 的 View 中检索 Has One 关系

sql - 用时间序列汇总数据填空