1

有一个 pdo 包装类,它使用以下方法关闭了模拟或准备好的语句:

setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

我看到一些 sql 语句是使用标准非参数化方法编写的,如下所示:

select * from table where name = '".$name."'. 

即使使用了 pdo 包装器,这些语句是否也可以防止 sql 注入?

4

1 回答 1

3

你防止注射的想法是完全错误的。

它不是 PDO 仅仅因为它的存在(可能会受到某些包装器的干扰)保护您的查询,而是准备好的语句

只要您使用准备好的语句,您的查询就是安全的,无论它是 PDO 还是包装器,甚至是糟糕的旧 mysql ext。

但是,如果您将数据直接放入查询中,就像在您的示例中一样,则根本没有保护

于 2013-05-25T10:02:23.970 回答