是urlencode& urldecode足以进行URL攻击

时间:2013-03-20 17:22:12

标签: php security code-injection

在我创建网址时,首先我urlencode,当我从网址获取$ _GET值时,首先我制作urldecode($_GET['param'])然后使用网址参数。

这是否足够,或者我应该为URL注入黑客做更多的事情。

注意:我在get表单中输入的参数可以包含'个字符。所以我不想在任何情况下删除'字符。

2 个答案:

答案 0 :(得分:1)

这不是用于防止我的知识攻击。编码和解码只能确保服务器清楚地解释您的请求。比如,当您没有在地址栏中输入正确的URL地址并将其发送到谷歌时,您的浏览器会对您键入的内容进行编码。这样,Google服务器就知道哪个部分是数据,哪个部分不是。因此,如果攻击是可能的,我认为如果你以错误的方式使用客户端数据,它会得到你。

这只是一个意见。尝试使用类似的东西:

$url = filter_var($_GET['param'], FILTER_SANITIZE_URL);

这将确保返回的是一个正确的url或NULL我认为。只是我的意见。上面的代码假设您要确保解析的数据是URL。

但要小心。

答案 1 :(得分:0)

不,对您的输入进行双重URL解码(这实际上是urldecode($_GET['param'])所做的,因为$_GET中的值已经过URL解码) nothing 防止任何类型的注射攻击。毕竟,以下标识适用于所有字符串:

$string === urldecode( urlencode( $string ) )

因此,如果攻击者想要将任何字符串作为输入提供给你,那么解决额外urldecode()所需要做的就是对输入字符串进行URL编码。


在要包含在URL中的字符串上使用urlencode()(一次!)当然是正确的做法,因为它可以确保生成的URL格式正确并且PHP填充$_GET数组时,PHP中的参数将被正确解码。然而,URL编码通常没有任何意义两次