PDO execute($input_parameter)作为bindParam/bindValue保护sql注入


PDO execute($input_parameter) protects from sql injections as bindParam/bindValue?

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()