【发布时间】:2013-12-07 15:31:33
【问题描述】:
我正在过滤带有$_SERVER['HTTP_REFERER'] 的页面。
让“pageb.php”通过$_SERVER['HTTP_REFERER']过滤用户是否来自“pagea.php”(虽然不可靠)。
在“pagea.php”前面有一个查询字符串(如“pagea.php?q=10”)之前,它运行良好。然后,如果用户从“pagea.php?q=10”转到“pageb.php”,则“pageb.php”不会检测到:
if($_SERVER['HTTP_REFERER']='http://pagea.php'){
echo 'This user has come from page a';
}else{
echo 'This user has come from another page';
}
即使使用前面的查询string q=10,我如何才能检测到来自“pagea.php”的用户?
【问题讨论】:
-
如果这两个文件都在您的服务器上,为什么不保留一个带有“上次访问页面”的
$_SESSION变量? -
这里是关于此事的讨论。 tl;dr:你不能依赖 HTTP_REFERER:stackoverflow.com/questions/5934747/is-serverhttp-referer-safe - 你想检查你的用户来自你自己的域还是来自其他域?例如,如果严格是前者,您可以使用会话来跟踪页面。
-
在您的伪 URL 代码中,可能类似于
if(strpos($_SERVER['HTTP_REFERER'], 'http://pagea.php') === 0)? -
您确实意识到这是由客户端发送的,它不一定会被发送,也不一定会说实话,对吧?
-
HTTP_REFERER是不可靠的并且可以被操纵,所以如果你的脚本处理敏感信息,这不是要走的路。也可以使用strpos在字符串中搜索单词/字符。
标签: php http-referer