php - $_SERVER ['HTTP_REFERER' ] 和 cookie

标签 php http-referer

我在 SO 和其他网站上读到,$_SERVER['HTTP_REFERER'] 是我们作为程序员应该始终避免的东西。阅读 PHP 手册我们会遇到这些行:

The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.

考虑到“用户代理”,例如 Web 浏览器(Safari、Chrome、Opera、Firefox,基本上都是),手册告诉我们这个变量可能会被它们更改。 这是我的第一个问题:

Question 1: Why should "users agent" modify this parameter? What are the reason for a web browser not to set this parameter?

只是出于好奇,我不会使用$_SERVER['HTTP_REFERER']。 从我最近的陈述来看,如果我们确实需要这样的功能,我们就需要弄清楚一些事情。我想到的第一件事是 cookie 解决方案,我们在其中执行以下操作:

setcookie('latest_page', __FILE__, 60 * 60 * 24 * 7);

然后,根据您喜欢的方式,您可以恢复所需的内容。 第二个也是最后一个问题来了:

Question 2: Is this way the best? Are there any way to improve it?

最佳答案

没有理由避免 HTTP_REFERER。只是在使用的时候要注意,它不是一直设置的,可以被客户端随意操作,所以是不可信数据。

绝大多数客户都设置了变量,并且设置正确。

阻止它的主要原因是隐私:例如,当在网络邮件客户端中打开电子邮件时,指向外部图像的链接将在 HTTP_REFERER header 中携带网络邮件服务的地址。这就是为什么 GMail and Yahoo make efforts to block it .

您建议的解决方法仅适用于同一站点内的移动,如果用户打开多个选项卡/浏览器窗口来浏览您的站点,则会中断。如果您需要知道引用页面,更好的方法是添加一个 GET 参数,例如

<a href="otherpage.html?from=thispage.html">

编辑:依赖 HTTP_REFERER 是危险的一个示例是在主页上显示实时更新的引用站点列表(“访问者来自...”),这很容易通过使用伪造的 HTTP_REFERER 集访问您的站点,将任意 URL 走私到该列表中。

关于php - $_SERVER ['HTTP_REFERER' ] 和 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057180/

相关文章:

ruby-on-rails - "request.referer == nil"是否总是表示直接流量?

php - Laravel 5.1 上传文件安全

javascript - 文件夹中的图像作为 JavaScript 变量

php - 非常简单的 PHP 模板...没有 `eval` 可以工作吗?

php - 确定用于 Kohana 的当前 Controller

http-referer - HTTP 引荐来源网址是什么?

redirect - 移动域 - 带数据的 301 重定向

php - Go有像php一样的序列化吗?

php - 如何在 PHP 中获取完整的引荐来源网址

redirect - 301 重定向是否始终保留引荐来源网址?