2012-08-09 55 views
1

我明白,当用户提交的数据处于徘徊状态时,参数化查询是必不可少的,但是我的问题是这是否适用于用户TAMPERABLE数据?请求变量所需的PDO中的参数化查询?

因此,如果我们有一个像“... /?id = 1”这样的url,是否有必要使用$ id准备任何语句,或者将URL编码移除威胁?

Joe

+0

任何来自任何外部来源的数据都应进行参数化。虽然在'id'示例中,只需将其转换为整数即可安全处理。 *必须*以这种或那种方式进行消毒的事物包括(但不限于)'$ _GET','$ _POST','$ _COOKIE'(以及隐含的'$ _REQUEST'),'$ _SERVER','$ _ENV',从文件读取的任何数据,从数据库读取的任何数据。 – DaveRandom 2012-08-09 10:20:36

+0

是的,我确实认为它需要准备,这是有道理的!感谢所有 – 2012-08-09 10:30:23

+0

每一本书,文章,博客......你都会阅读这篇文章,归结为这样一句话:_不要相信网络_。因此,请求参数不可信。是的,它需要准备 – 2012-08-09 10:37:49

回答

4

为什么不会您使用准备好的语句/ paramaterised查询所有情况下有外部/变量输入?

只有您可以查询信任是那些每个元素都是硬编码或从应用程序中的硬编码元素派生的元素。

甚至不信任您从您自己的数据库中提取的数据。这被视为外部/可变数据。复杂的攻击可以使用比简单的“修改查询字符串参数”更多的向量。

我认为对于少量额外的代码开销,完全值得您从知道得到的安心,您的查询受到保护。

0

Url encoding will not remove the threat。

任何用户可触摸的东西都应该被视为不安全和潜在的威胁。您通过id进行查询并不验证它,只是将其直接插入查询中,仍然可能导致与完全不使用PDO相同的注入问题。