我认为像这样关闭多个语句以防止这种类型的 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/