0

当我创建 URL 时,首先urlencode是它们,当我从 URL 获取 $_GET 值时,首先我创建urldecode($_GET['param'])然后使用 URL 参数。

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

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

4

2 回答 2

1

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

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

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

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

不过要小心。

于 2013-03-20T18:25:39.343 回答
0

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

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

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


在您想要包含在 URL 中的字符串上使用urlencode()(一次!)当然,无论如何都是正确的做法,因为它确保生成的 URL 格式正确并且其中的参数正确在填充$_GET数组时由 PHP 解码。但是,URL 对任何内容进行两次编码通常没有意义。

于 2013-03-20T18:48:55.980 回答