execute($input_parameter)
是否像bindParam/bindValue
一样保护sql注入?
如果答案是肯定的,bindParam()/bindValue()/execute()
对任何sql-inject攻击都是无懈可击的?或者我需要采取措施来防止此类攻击?
感谢您的帮助!
答案 0 :(得分:2)
至于execute($input_parameters)
与单独的bindParam/bindValue/execute
步骤一样安全,答案看起来基本上是,是的。
但是,您可能仍需要采取进一步措施,具体取决于您构建传递给PDO::prepare
调用的查询字符串的方式。并不总是可以在准备好的查询字符串中参数化所有内容。例如,您不能将参数用于表或列名称。如果您允许用户数据或任何外部数据进入该查询字符串,则必须在将字符串传递给prepare
之前清理该数据。
有关更多详细信息,请参阅这些stackoverflow问题:
一般来说,你应该过滤掉所有的输入数据,所以如果你想要更加安全,你可以使用适合你需要的过滤器来清理任何输入数据的输入数据,甚至可以写一个FILTER_CALLBACK自定义功能,如果你愿意。 对于来自用户提供的数据的表或列名称,常见的验证技术是检查允许名称数组的值。
希望这会有所帮助。祝好运。注意安全! ;)
答案 1 :(得分:0)
是的,它做同样的事情。我不能说它是无懈可击的,因为底层的SQL引擎本身就容易受到攻击。但那真的不在你手中了。
因此,出于所有实际原因,是的,它是安全的。
编辑:查看PHP Documentation(第一和第二个例子)。一个使用bindParam()
,另一个使用execute()
。