我有这个“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
答案 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;
}