2015-06-20 66 views
2

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

document.referrer 

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

+0

我不担心它被欺骗,只是没有它可用。另外,我认为HTTP_REFERER是作为一个http头传递的?不是window.location.href只是从url栏直接抓取? – Gilberg

回答

0

由于隐私问题,浏览器或用户想要隐藏这些信息,您应该始终假定有关引用者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,我会说这是在实践中可靠的,但只是因为它是有趣的是,客户端将提供使取决于应用程序的正确信息将按预期行事。

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

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

+0

浏览器实际上是否可以将window.location.href留空?如果是这样,你有没有实际的例子说明它是如何完成的,或者浏览器将它清空了? – Gilberg

+0

有些浏览器(或插件和扩展)可能会这样做,但我不相信这在实践中发生,但我没有检查过。我只是认为这些信息可靠。 –

+0

我只想指出,你永远不能确定浏览器不会“搞砸”。这仍然是来自客户端的信息,并且很好意识到这一点。 –

相关问题