我认为关闭这样的多个语句是一个好主意,以防止这种类型的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之前,为了检测包含多个语句的查询,可能有任何解析方法吗?
答案 0 :(得分:3)
不,没有办法在PostgreSQL中禁用多语句。据我所知,在PHP Pg或PDO PostgreSQL驱动程序中没有任何方法可以这样做。
无论如何,它们不是你的问题。禁用多语句可能是(轻微)SQL注入损害缓解,但它不会是任何真正的保护。例如,考虑可写的CTE或限定符删除攻击。
相反,首先要正确保护您的代码。严格使用参数化语句而不是字符串连接,因此首先没有SQL注入机会。避免SQL注入并不难,您只需要对编码实践有点了解。
对所有查询使用PDO或pg_query_params
,并确保不将直接作用域外的文本直接连接到SQL文本中,使用参数。即使它来自应用程序的其他地方,也被认为是“可信的”......后来的重构可能会改变它。
答案 1 :(得分:-1)
我认为这是一个好主意
实际上,不是。
您必须阻止注射,而不是多次查询。