【发布时间】:2010-06-09 16:45:39
【问题描述】:
我需要知道我网站上某个页面的引用服务器。
是否有任何安全的方法来检查用户从何处“来到”页面?
我尝试将其上传到我的服务器,但是当我将地址写入浏览器地址栏中的文件时,这根本不会输出任何内容:
<?php echo $_SERVER['HTTP_REFERER']; ?>
我需要检查这个才能在页面上显示链接...
谢谢
【问题讨论】:
标签: php javascript html security apache
我需要知道我网站上某个页面的引用服务器。
是否有任何安全的方法来检查用户从何处“来到”页面?
我尝试将其上传到我的服务器,但是当我将地址写入浏览器地址栏中的文件时,这根本不会输出任何内容:
<?php echo $_SERVER['HTTP_REFERER']; ?>
我需要检查这个才能在页面上显示链接...
谢谢
【问题讨论】:
标签: php javascript html security apache
是否有任何安全的方法来检查用户从何处“来到”页面?
不是真的。像所有 HTTP 标头一样,这可以很容易地修改。此外,浏览器还可以选择从不发送推荐人。
$_SERVER['HTTP_REFERER']; 将在浏览器确实发送引荐来源网址时工作,但无法验证它是否真实。
我尝试将其上传到我的服务器,但是当我将地址写入浏览器地址栏中的文件时,这根本不会输出任何内容
在这种情况下,浏览器不会发送推荐人,因为您不是来自任何地方。
【讨论】:
尝试使用$_SERVER['HTTP_REFERER']。请注意,它是“HTTP_REFERER”,而不是人们所期望的“HTTP_REFERRER”
另外,请注意此变量上的documentation:
页面的地址(如果有) 将用户代理引用到当前 页。这是由用户代理设置的。 不是所有的用户代理都会设置这个,并且 有些提供修改的能力 HTTP_REFERER 作为一个特性。简而言之, 它不能真正被信任。
此外,ceejayoz 正确地指出,如果您直接进入一个页面而不点击那里的链接,大多数浏览器不会设置引荐来源网址。
【讨论】:
两件事:
应该是$_SERVER['HTTP_REFERER'](注意第一单R)。不朽的错字案例,但这就是它的外观。 :)
其次,仅当您通过单击链接到达该页面时才会发送 http-referer。在地址栏中输入链接可以绕过它。
但要回答您的实际问题,有几个人设置了浏览器,因此从未发送过引用者,这意味着遗憾的是,没有可靠的方法来确定链接。 (更不用说数据可以被篡改,因为它是由客户端发送的。)
【讨论】:
我尝试将其上传到我的服务器,但是当我将地址写入浏览器地址栏中的文件时,这根本不会输出任何内容:
那是因为在那种情况下没有引荐来源网址 - 你在浏览器地址栏中输入了它。
【讨论】: