当我创建 URL 时,首先urlencode
是它们,当我从 URL 获取 $_GET 值时,首先我创建urldecode($_GET['param'])
然后使用 URL 参数。
这是否足够或者我应该为 URL 注入黑客做更多的事情。
注意:我在get表单中输入的参数可以包含'
字符。所以我不想'
在任何情况下删除字符。
当我创建 URL 时,首先urlencode
是它们,当我从 URL 获取 $_GET 值时,首先我创建urldecode($_GET['param'])
然后使用 URL 参数。
这是否足够或者我应该为 URL 注入黑客做更多的事情。
注意:我在get表单中输入的参数可以包含'
字符。所以我不想'
在任何情况下删除字符。
据我所知,这不用于防止攻击。编码和解码只能确保服务器清楚地解释您的请求。就像,当您没有在地址栏中输入正确的 URL 地址时,您的浏览器会对您键入的任何内容进行编码并将其发送给谷歌。这样,谷歌服务器就知道哪些部分是数据,哪些部分不是。所以,如果攻击是可能的,我认为如果你以错误的方式使用客户端数据,它会得到你。
但这只是一种意见。尝试使用类似的东西:
$url = filter_var($_GET['param'], FILTER_SANITIZE_URL);
这将确保返回的内容是正确的 url 或我认为的 NULL。不过只是我的看法。上面的代码假设您要确保解析的数据是一个 URL。
不过要小心。
不,对您的输入进行双 URL 解码(实际上是这样urldecode($_GET['param'])
做的,因为其中的值$_GET
已经被 URL 解码)并不能防止任何类型的注入攻击。毕竟,以下标识适用于所有字符串:
$string === urldecode( urlencode( $string ) )
因此,如果攻击者想要将任何字符串作为输入提供给您,他们需要做的就是解决您的额外问题urldecode()
,只需对输入字符串进行 URL 编码。
在您想要包含在 URL 中的字符串上使用urlencode()
(一次!)当然,无论如何都是正确的做法,因为它确保生成的 URL 格式正确并且其中的参数正确在填充$_GET
数组时由 PHP 解码。但是,URL 对任何内容进行两次编码通常没有意义。