execute($input_parameter)
是否像bindParam/bindValue
一样保护sql注入?
如果答案是肯定的,那么bindParam()/bindValue()/execute()
不会受到任何sql注入攻击?或者我需要采取措施来防止这种攻击?。
谢谢你的帮助!。
就execute($input_parameters)
和单独的bindParam/bindValue/execute
步骤一样安全而言,答案基本上是肯定的。
但是,您可能仍然需要采取进一步的措施,这取决于您如何构造传递给PDO::prepare
调用的查询字符串。并非总是可以参数化准备好的查询字符串中的所有内容。例如,不能将参数用于表或列名。如果允许用户数据或任何外部数据进入该查询字符串,则在将该字符串传递给prepare
之前,仍必须清除该数据。有关更多详细信息,请参阅这些堆叠式流程问题:
- PDO准备的声明有多安全
- PDO准备的语句是否足以防止SQL注入
通常情况下,无论如何都应该过滤所有输入数据,因此,如果您希望格外安全,可以使用适合您需要的过滤器来清除任何用于SQL类型的输入数据,甚至可以编写FILTER_CALLBACK自定义函数。在表或列名来自用户提供的数据的情况下,一种常见的验证技术是根据允许的名称数组检查值。
希望这能有所帮助。祝你好运保持安全!)
是的,它也做同样的事情。我不能说它是无懈可击的,因为底层SQL引擎本身可能很脆弱。但这真的不在你的手中了。
因此,出于所有实际原因,是的,它是安全的。
编辑:查看PHP文档(第一个和第二个示例)。一种是使用bindParam()
,另一种使用execute()
。