在PHP PDO

时间:2016-07-11 10:52:50

标签: php security pdo

有没有办法在PDO中禁用多个语句查询?一种适用于所有支持的驱动程序的方法?

或者,是否有任何众所周知的过滤器检测字符串中的多个语句?

我知道准备好的语句可以更好地防止SQL注入风险,在这种情况下我有理由不能使用它们。

2 个答案:

答案 0 :(得分:4)

你正在吠叫错误的树。

多语句不是SQL注入的同义词。它只是一个子集,一个非常小的子集,其他可能的方式来利用注射。

因此,您应该保护注射,而不是多重声明。为此,发送到数据库API的查询必须在脚本中100%硬编码。为此,请始终使用占位符替换查询中的所有变量。

答案 1 :(得分:0)

是的,有一种方法可以禁用多个语句查询,至少对于PDO MySQL,可以使用PDO :: MYSQL_ATTR_MULTI_STATEMENTS常量[1,2]来实现。该常数从PHP 5.5.21和PHP 5.6.5开始存在。

我一直在寻找PostgreSQL,SQLite和MS SQL Server的等效项,但我没有找到它。但是,根据我的测试,PDO PostgreSQL和SQLite不允许多语句查询,而pdo_sqlsrv则允许。不过,我尚未找到有关此文件的官方文档,因此它可能取决于我的驱动程序版本或其他因素。

参考文献:

[1] http://php.net/manual/en/ref.pdo-mysql.php

[2] https://bugs.php.net/bug.php?id=68424