9

是否execute($input_parameter)像防止sql注入一样bindParam/bindValue

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

感谢帮助!。

4

2 回答 2

2

execute($input_parameters)单独bindParam/bindValue/execute步骤的安全性而言,答案似乎基本上是肯定的。

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

一般来说,无论如何您都应该过滤所有输入数据,所以如果您想更加安全,您可以使用适合您需要的过滤器来清理任何用于 SQL 类型内容的输入数据,或者甚至编写 FILTER_CALLBACK 自定义函数,如果您希望。对于来自用户提供的数据的表或列名称,一种常见的验证技术是根据允许的名称数组检查值。

希望这可以帮助。祝你好运。注意安全!;)

于 2012-09-13T08:24:57.777 回答
0

是的,它做同样的事情。我不能说它是无懈可击的,因为底层 SQL 引擎本身可能是脆弱的。但这真的不在你的手中了。

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

编辑:查看PHP 文档(第一个和第二个示例)。一是搭配bindParam(),二是用途execute()

于 2012-09-12T06:10:04.893 回答