有没有办法在PDO中禁用多个语句查询?一种适用于所有支持的驱动程序的方法?
或者,是否有任何众所周知的过滤器检测字符串中的多个语句?
我知道准备好的语句可以更好地防止SQL注入风险,在这种情况下我有理由不能使用它们。
答案 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则允许。不过,我尚未找到有关此文件的官方文档,因此它可能取决于我的驱动程序版本或其他因素。
参考文献: