PHP $_SERVER['HTTP_REFERER'] 无效

版权声明:转载请注明出处 https://blog.csdn.net/doubleguy/article/details/90142641

学到PHP的超级全局变量时,遇到了PHP $_SERVER['HTTP_REFERER'],不料在phpstorm中运行的到如下结果:

<?php
$x=5;
$y=10;

function addtion(){
    $GLOBALS["z"]=$GLOBALS["x"]+$GLOBALS["y"];/** $GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
                                                * $GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。*/
}

addtion();
echo $z."<br>";
var_dump ($z);
echo "<br>";

/**
 * $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。
 * 不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
 * 以下实例中展示了如何使用$_SERVER中的元素:
 */
echo $_SERVER["PHP_SELF"]."<br>";
echo $_SERVER["SERVER_NAME"]."<br>";
echo $_SERVER["HTTP_HOST"]."<br>";
echo $_SERVER["HTTP_REFERER"]."<br>";
echo $_SERVER["HTTP_USER_AGENT"]."<br>";
echo $_SERVER["SCRIPT_NAME"]."<br>";

我们知道,它得到的是:引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。),也就是说,用户代理(浏览器)可能更改了它,也可能是当前页没有前一页(这个意思就是说当前页是点击前一页(来源页面)中的链接得来的,我觉得最可能是这个,毕竟我是用phpstorm运行滴)

查阅得知:它无效还可能是以下几种情况。这几种情况源自https://www.cnblogs.com/caicaizi/p/6053890.html

PHP $_SERVER['HTTP_REFERER'] 无效

需要注意的是,$_SERVER['HTTP_REFERER'] 完全来源于浏览器。并不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。因此,$_SERVER['HTTP_REFERER'] 不总是真实正确的。

通常下面的一些方式,$_SERVER['HTTP_REFERER'] 会无效:

  1. 直接输入网址访问该网页。
  2. Javascript 打开的网址。
  3. Javascript 重定向(window.location)网址。
  4. 使用 meta refresh 重定向的网址。
  5. 使用 PHP header 重定向的网址。
  6. flash 中的链接。
  7. 浏览器未加设置或被用户修改。

所以一般来说,只有通过 <a></a> 超链接以及 POST 或 GET 表单访问的页面,$_SERVER['HTTP_REFERER'] 才有效。

由于 $_SERVER['HTTP_REFERER'] 对 POST 表单访问也是有效的,因此在表单数据处理页面一定程度上可以通过校验 $_SERVER['HTTP_REFERER'] 来防止表单数据的恶意提交。但该方法并不能保证表单数据的绝对正确,即对表单数据的真实性检测并不能完全依赖于 $_SERVER['HTTP_REFERER'] 。

猜你喜欢

转载自blog.csdn.net/doubleguy/article/details/90142641
今日推荐