如何在postgres中关闭多个语句?

时间:2014-03-20 10:49:33

标签: php sql postgresql sql-injection

我认为关闭这样的多个语句是一个好主意,以防止这种类型的SQL注入。 多个陈述的示例:

$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之前,为了检测包含多个语句的查询,可能有任何解析方法吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:-1)

  

我认为这是一个好主意

实际上,不是。

您必须阻止注射,而不是多次查询。

相关问题