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