【问题标题】:PHP $_SERVER['HTTP_REFERER'] vs. Javascript document.referrer?PHP $_SERVER['HTTP_REFERER'] vs. Javascript document.referrer?
【发布时间】:2015-09-06 15:46:04
【问题描述】:

最终我需要知道托管我的 javascript 文件之一的域。我已经阅读并亲身体验过$_SERVER['HTTP_REFERER'] 不可靠。我测试的前 3 个浏览器/计算机组合之一没有发送HTTP_REFERER,我知道它可以被欺骗。我使用两种 javascript 方法实现了不同的解决方案。

document.referrer

window.location.href

我使用前者来获取有人点击了我的一个链接的窗口的 url。我使用前者来查看我的 javascript 文件包含在哪个域中。到目前为止,我已经对其进行了一些测试,它可以很好地从浏览器中获取 url,没有任何问题。我的问题是,这两种 javascript 方法可靠吗?他们会每次都从浏览器返回 url,还是有一些警告,比如我还没有遇到过使用 $_SERVER['HTTP_REFERER'] 之类的警告?

【问题讨论】:

  • document.referrer 使用来自客户端的信息与 HTTP_REFERER 相同,因此它们都可以以相同的方式进行欺骗。
  • 这些都不会显示 Javascript 文件的位置。 window.location.href 是使用 JS 文件的网页的 URL。 document.referrer 是包含他们到达那里的链接的页面。
  • 我不担心它被欺骗,就像它没有可用一样。另外,我认为 HTTP_REFERER 是作为 http 标头传递的? window.location.href 不是直接从url栏抓取的吗?
  • 是的,window.location.href 是 URL 栏中的任何内容。
  • @Barmar |对不起,也许我没有说清楚。我知道 javascript 文件来自我的服务器。我想看看谁在他们的网站上包含它。

标签: javascript php url referrer referer


【解决方案1】:

您应该始终假设有关引荐来源网址的任何信息都将不可用(甚至可能不可靠),因为浏览器或用户出于隐私问题想要隐藏此信息。

一般来说,从 HTTPS 链接到 HTTP 域时,您不会获得引荐来源网址信息。检查此问题以获取更多信息:

https://webmasters.stackexchange.com/questions/47405/how-can-i-pass-referrer-header-from-my-https-domain-to-http-domains

关于使用window.location.href,我想说它在实践中是可靠的,但这只是因为有趣的是客户端将提供正确的信息,以便依赖于该信息的应用程序将按预期运行。

请记住,这仍然是客户端向您发送一些信息,因此始终由浏览器向您发送正确的信息。你无法控制它,只要相信它会按照标准中的规定工作。客户可能仍会出于任何原因决定隐瞒或伪造。

例如,在某些情况下,例如第三方包含的脚本(也是出于隐私原因),浏览器可能会选择将其留空。

【讨论】:

  • 浏览器真的可以将 window.location.href 留空吗?如果是这样,您是否有任何实际示例来说明它是如何完成的,或者浏览器会将其屏蔽掉?
  • 某些浏览器(或插件和扩展)可能会这样做,但我不相信这在实践中会发生,但我没有检查过。我只是认为这些信息可靠。
  • 我只想指出,您永远无法确定浏览器不会“搞砸”。毕竟它仍然是来自客户端的信息,很高兴知道这一点。
猜你喜欢
  • 2012-09-27
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2023-03-31
  • 1970-01-01
  • 2012-04-13
相关资源
最近更新 更多