这个PHP重定向是不安全的吗?

时间:2011-02-06 21:14:19

标签: php header

嗯,我无法确定任何不安全因素,但是想知道你是否可以,如果可以,如何修补/修补?

下面是代码:

header("Location: http://example.com/search/{$_POST['term']}/{$_POST['type']}");

我正在重定向的网站也进行了验证&在他们身边进行消毒,但我关心的是 - 这是否以任何方式重定向不安全(在我身边 - 因为我正在使用直接$_POST)。

感谢所有帮助。

PS:刚开始好奇,因为我一直认为使用未经批准的用户输入是危险的(或者至少适用于XSS和SQLi)。

4 个答案:

答案 0 :(得分:8)

总体而言,对于大多数运行现代版PHP的网站而言,是安全的

手头有两个问题:

  • 恶意用户可能会欺骗受害者无意中访问网站上/search/*/*格式的任何页面,方法是将其链接到使用重定向发布到该页面的恶意页面。 (请注意,它们不仅限于/search之后的两个斜杠,因为它们的POST变量可能包含斜杠。)这类似于将某个缩短的bit.ly URL移交给重定向它们,所以它不是太糟糕。
  • HTTP response splitting。如果恶意用户在其POST数据中包含换行符(特别是CRLF / \r\n),则可能导致header()调用输出多个标头,包括用于设置Cookie的标头等。但是,从PHP 5.1.2 this has been fixed
  • 开始

答案 1 :(得分:2)

这不是安全问题,但您可能应该使用urlencode($_POST['term'])对这些参数进行URL编码。

答案 2 :(得分:0)

是的,这是非常不安全的。永远不应该将未经检查的用户输入放入脚本中。我建议,在最小时,使用filter_input_array清理你的$ _POST数组,然后再对它做任何事情。

答案 3 :(得分:0)

希望从客户端接收重定向URL的Web层将对URL进行整体验证,因此您可能很安全。但是在发送重定向之前通过简单的验证来运行这两个字段并没有什么坏处。