PHP referer url和重定向

时间:2013-02-28 12:11:11

标签: php

我似乎无法理解为什么以下将所有流量发送到未找到页面的页面,即使Paypal推荐也是如此。有什么想法吗?

$refererUrl = $_SERVER['HTTP_REFERER'];
$Exploded = explode("/",$refererUrl);
$urlToCheck = $Exploded[3];
$findURL = strpos($urlToCheck,'paypal.com');
if($findURL === false){
    header('location:/page-not-found');
} else  {
/* Do something if page referred to by Paypal */
}

3 个答案:

答案 0 :(得分:3)

您正在检查'paypal.com'中是否存在$Exploded[3]。为什么你期望引用url的那部分成为主机名?数组索引从0开始,因此从左到右计数将给出以下结果,表明2将是正确的索引。

$Exploded = explode('http://www.google.com/?q=foobar', '/');

// $Exploded now contains:
0: http:
1: 
2: www.google.com
3: ?q=foobar

但是,使用一些解析任意URL并从解释的URL读取主机名的实用程序会更安全。你可以这样做(未经测试):

$referer = parse_url($_SERVER['HTTP_REFERER']);
if($referer['host'] != 'paypal.com')
    header('location:/page-not-found');
else
    /* Do something if page referred to by Paypal */

parse_url doc:http://php.net/manual/en/function.parse-url.php

答案 1 :(得分:1)

您确定HTTP_REFERER已设定吗?如果你看一下它所说的documentation

  

将用户代理引用到当前页面的页面地址(如果有)。这是由用户代理设置的。并非所有用户代理都会设置此功能,有些用户可以将HTTP_REFERER修改为功能。简而言之,它无法真正被信任。

答案 2 :(得分:0)

这是对的吗?

$urlToCheck = $Exploded[3];

如果您的请帖看起来像http://www.example.com/ .... 通过“/”爆炸,你将永远不会在第三个索引中获得域名。应该是2。

尝试使用

$urlToCheck = $Exploded[2];