【问题标题】:$_SERVER['HTTP_REFERER'] does not work alltime$_SERVER['HTTP_REFERER'] 始终不起作用
【发布时间】: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


【解决方案1】:

使用strpos()检查一个字符串是否包含另一个字符串:

<?php
if (strpos($_SERVER['HTTP_REFERER'], 'pagea.php') !== false) {
  echo 'from page a';
}

【讨论】:

    【解决方案2】:

    使用比较运算符而不是赋值 if($_SERVER['HTTP_REFERER']='http://pagea.php'){

    = 将是 ==

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 2016-12-17
      相关资源
      最近更新 更多