PHP $_SERVER['HTTP_REFERER'] 与 Javascript document.referrer 有何不同?

3
最终,我需要知道托管我的JavaScript文件的域是什么。我已经阅读并亲身体验了$_SERVER['HTTP_REFERER']不可靠的情况。我测试的前三个浏览器/计算机组合中有一个没有发送HTTP_REFERER,而且我知道它可以被欺骗。我使用了两种不同的JavaScript方法来实现另一种解决方案。
document.referrer

AND

window.location.href

我使用前者来获取某人点击我的链接时所在窗口的URL。 我使用后者来查看我的javascript文件包含在哪个域中。 到目前为止,我已经进行了一些测试,并且它非常好地从浏览器中抓取URL,没有任何问题。 我的问题是,这两种javascript方法可靠吗? 它们是否每次都会返回浏览器中的URL,或者是否存在类似于使用$_SERVER['HTTP_REFERER']的注意事项,我还没有遇到过?


2
document.referrer使用与HTTP_REFERER相同的客户端信息,因此它们都可以以相同的方式被伪造。 - Barmar
1
这两个选项都无法显示Javascript文件的位置。 window.location.href是使用JS文件的网页的URL。document.referrer是包含链接并导致访问该网页的上一页。 - Barmar
我不太担心它被欺骗,只是担心它不可用。此外,我认为HTTP_REFERER是作为http头传递的?window.location.href不是直接从url栏中获取吗? - Gilberg
是的,window.location.href 就是 URL 地址栏中的内容。 - Barmar
@Barmar | 抱歉,可能我表达不够清楚。我知道JavaScript文件来自我的服务器。我想知道谁在将其包含在他们的网站上。 - Gilberg
他们有可能在加载你的脚本之前修改这些方法在客户端上的行为。总的来说,你永远无法确定在客户端上所做的任何事情。 - Barmar
1个回答

1

您应该始终假设有关引荐 URI 的任何信息都将不可用(甚至可能不可靠),因为浏览器或用户希望由于隐私问题而隐藏此信息。

通常,当从 HTTPS 链接到 HTTP 域时,您将无法获得引荐信息。 有关此更多信息,请查看此问题:

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

关于使用 window.location.href,实际上它是可靠的,但这仅因为用户会提供正确的信息,使得依赖此信息的应用程序可以正常运作。请记住,这仍然是客户端向您发送一些信息,所以它始终取决于浏览器是否发送了正确的内容。您无法控制这个过程,只需信任它将按照标准规定的方式工作。客户端仍可能因任何原因隐藏或伪造信息。例如,在某些情况下,比如第三方包含的脚本(也出于隐私考虑),浏览器可能选择将其留空。

1
浏览器实际上可以将window.location.href留空吗?如果可以,您有任何实际的示例或者浏览器是如何将其留空的? - Gilberg
有些浏览器(或插件和扩展程序)可能会这样做,但我不认为这在实践中会发生,虽然我没有检查过。我认为这个信息是可靠的。 - A. Andres
我只想指出,你永远无法确定浏览器不会“搞砸”。毕竟,它仍然是来自客户端的信息,了解这一点很重要。 - A. Andres

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接