HTTP_referer用于多个URL

时间:2014-06-17 07:37:37

标签: php http-referer

我有这个“HTTP_referer-script”来检查访问者在进入网站时是否来自某个URL(受密码保护)。我的问题是,如果访问者来自绝对正确的URL,它似乎才有效。我:

如果用户来自:http://mydomain.com,它可以正常工作,但如果用户来自http://www.mydomain.com则无法正常工作。

无论如何都要向HTTP_referer添加第二个URL,在这种情况下是相同的域,但是还有“www”吗?

<?php 
$referrer = $_SERVER['HTTP_REFERER']; 

if ($referrer != 'http://mydomain.com/') { 
    die("You do not have access to this site."); 
} 

// put your page code here 

?>
<h1>Content here</h1> 

非常感谢! / A

4 个答案:

答案 0 :(得分:1)

$_SERVER['HTTP_REFERER']的内容源自客户端发送到您的网络服务器的请求。首先,重要的是要意识到这些信息绝不可信。它很容易被客户伪造。

话虽如此。您可能想要做的只是检查域是否是$_SERVER['HTTP_REFERER']字符串的一部分。因为在这种情况下https://domain.com也不会起作用。

所以通过你的例子,使用这个:

<?php 

if ( strstr($_SERVER['HTTP_REFERER'], 'mydomain.com') ) { 
    die("You do not have access to this site."); 
} 

// put your page code here 

?>
<h1>Content here</h1> 

此代码只检查&#34; mydomain.com&#34;是$ _SERVER [&#39; HTTP_REFERER&#39;]内容的一部分。

要意识到这也意味着:http://www.somedomain.com?test=mydomain.com作为引用者也会匹配,但是你很可能不会遇到这种情况(也不一定会有问题......)

答案 1 :(得分:0)

in_array与网址数组结合使用:

if (!in_array($referrer, array('http://mydomain.com/', 'http://www.mydomain.com/'))) { 
    die("You do not have access to this site."); 
} 

答案 2 :(得分:0)

如下所示放两个if语句。

 <?php 
$referrer = $_SERVER['HTTP_REFERER']; 

if ($referrer != 'http://mydomain.com/') { 
    die("You do not have access to this site."); 
} 
if ($referrer != 'http://www.mydomain.com/') { 
    die("You do not have access to this site."); 
} 


// put your page code here 

?>
<h1>Content here</h1> 

答案 3 :(得分:0)

$allowed = array("hello.com","example2.com");

foreach ($allowed as $site) {
    if(!preg_match("#$site#", $url))
         die("You do not have access to this site."); 
    else
        break;
}