PDO执行($ input_parameter)保护sql注入为bindParam / bindValue?

时间:2012-09-12 06:03:44

标签: php sql pdo

execute($input_parameter)是否像bindParam/bindValue一样保护sql注入?

如果答案是肯定的,bindParam()/bindValue()/execute()对任何sql-inject攻击都是无懈可击的?或者我需要采取措施来防止此类攻击?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

至于execute($input_parameters)与单独的bindParam/bindValue/execute步骤一样安全,答案看起来基本上是,是的。

但是,您可能仍需要采取进一步措施,具体取决于您构建传递给PDO::prepare调用的查询字符串的方式。并不总是可以在准备好的查询字符串中参数化所有内容。例如,您不能将参数用于表或列名称。如果您允许用户数据或任何外部数据进入该查询字符串,则必须在将字符串传递给prepare之前清理该数据。 有关更多详细信息,请参阅这些stackoverflow问题:

一般来说,你应该过滤掉所有的输入数据,所以如果你想要更加安全,你可以使用适合你需要的过滤器来清理任何输入数据的输入数据,甚至可以写一个FILTER_CALLBACK自定义功能,如果你愿意。 对于来自用户提供的数据的表或列名称,常见的验证技术是检查允许名称数组的值。

希望这会有所帮助。祝好运。注意安全! ;)

答案 1 :(得分:0)

是的,它做同样的事情。我不能说它是无懈可击的,因为底层的SQL引擎本身就容易受到攻击。但那真的不在你手中了。

因此,出于所有实际原因,是的,它是安全的。

编辑:查看PHP Documentation(第一和第二个例子)。一个使用bindParam(),另一个使用execute()