阻止链接将referrer发送到目标网页

79

我有一个页面,我不想让出站链接发送referrer,这样目标网站就不知道它们来自哪里。

我猜这可能是不可能的,但我只想确保没有任何隐藏的JavaScript魔法可以做到,并且可以在某些(如果不是大多数)浏览器中使用。

也许有些聪明的HTTP状态码重定向技巧?

类似这样的东西将是完美的

<a href="example.com" send_referrer="false">link</a>
7个回答

90

66
如果您是在2015年及以后访问本页面,现在有一个正式解决方案正在得到支持。
HTTP 引荐来源策略 规范允许您控制链接子资源(图像、脚本、样式表等)的引荐发送,并且目前 Firefox、Chrome、Opera 和桌面 Safari 11.1 上已经支持
Edge、IE11、iOS Safari 和 11.1 之前版本的桌面 Safari 支持一种旧版本的规范,其中选项为 neveralwaysorigindefault根据规范,可以通过指定多个策略值来支持它们。无法识别的将被忽略,而最后一个识别的将会生效。
<meta name="referrer" content="never">
<meta name="referrer" content="no-referrer">

另外,如果您想将其应用于需要 "crossorigin" 属性的 "audio"、"img"、"link"、"script" 或 "video" 标签,请尽可能选择 "crossorigin =“anonymous”",以便仅共享绝对最少量(“Origin”标头)。 (使用CORS时无法摆脱“Origin”标头,因为远程站点需要知道哪个域正在发出请求,以允许或拒绝它。)

1
@TomPažourek 谢谢。我觉得那是旧的语法。不确定我为什么会使用它。 - ssokolow
1
仍有一些浏览器使用建议的元标记传递引用者。有没有更好的方法来阻止向任何浏览器发送引用者?使用 noopener 是否有帮助? - Alex
@Alex 我没有时间做出确切的回答,但是 Firefox bug 中提到 noopener 是旧版 rel="noreferrer" 的一个较弱版本。据我所知,每个支持 noopener 的浏览器都已经更早支持了这个旧版功能。 - ssokolow
1
如果您没有crossorigin属性(这是最常见的情况),则隐私是安全的,不会交换任何信息(没有Origin头)。 - collimarco
因此,当提到 crossorigin="anonymous" 时,我说的是“需要CORS的标签”。 - ssokolow
显示剩余3条评论

41

4
注意,此 shim 依赖于已弃用的 $.browser。 - Michael J. Calkins

10

Bigmack 步入正轨,但在 Firefox 中,JavaScript 更改位置仍会发送 referrer。对我来说,使用 meta refresh 似乎解决了这个问题。

<a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://google.com/&#39;"></html>'>Link</a>

2
我相信这就是谷歌在Gmail中为链接所做的事情 - 您单击链接,然后转到一个空白的谷歌跟踪页面,其中包含一个元刷新以访问您单击的原始链接。 - wezell

4

我也在尝试弄清楚这个问题。

我想到的解决方法是使用数据URL来隐藏我实际访问的页面。

<a href='data:text/html;charset=utf-8, <html><script>window.location = "http://google.ca";</script></html>'>Link</a>

这个链接打开的页面只包含javascript代码,用来加载不同的页面。 在我的测试中,最终目标页面没有referrer信息。如果试图发送referrer,它可能会发送data url信息,这将不会透露来源信息。

这对于Chrome浏览器是有效的。对于那些不支持在data url页面内使用javascript的浏览器,您可以尝试使用meta refresh。


在Chrome中可用。不幸的是,在Firefox中不可用。 - zaius

1
除了已经提供的信息外,该主题还有更多相关信息:https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer 具体而言,允许您在需要同源或跨源请求的不同规则时发送或不发送引荐信息。
根据您的具体用例,需要考虑一些事项。例如,如果您从第三方网站拉取图像/ CSS / JavaScript,则可能不想识别您正在执行此操作的URL,因此会使用no-referrer选项。而如果您正在从自己的网站链接到其他网站,则可能希望它们知道您正在向它们发送流量。始终仔细考虑这对双方的影响。如果这两个领域存在冲突,则还有其他选择,例如在URL结尾处添加UTM跟踪参数,这对某些人可能很有用。完整详情请参阅:https://www.contradodigital.com/2014/06/03/importance-utm-tracking-parameters-social-media/

0

我不确定我是否漏掉了什么,非常乐意接受纠正,但是一个URL缩短服务是否能够满足您的需求呢?

可以推测,在目标站点的日志中只会显示缩短服务的域名,而不是最初的引荐域名,因此您将保持匿名。


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - AthulMuralidhar

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