人们为什么使用rel =“ noopener noreferrer”而不是rel =“ noreferrer”

时间:2019-08-23 15:07:58

标签: html security

我经常看到以下模式:

<a href="<external>" target="_blank" rel="noopener noreferrer"></a>

但据我所知,noreferrer暗示了noopener的作用。那么为什么在这里甚至需要noopener

https://html.spec.whatwg.org/multipage/links.html#link-type-noreferrer

  

<a href="..." rel="noreferrer" target="_blank"><a href="..." rel="noreferrer noopener" target="_blank">具有相同的行为。

请注意,noreferrer浏览器的支持范围比noopener中的一种更为广泛 https://caniuse.com/#feat=rel-noreferrer https://caniuse.com/#feat=rel-noopener

2 个答案:

答案 0 :(得分:2)

  

将“ noopener”和“ noreferrer”组合在一起的rel标记意味着,由于没有noreferrer标签,因此不应将引荐来源信息传递到要链接的网站,并且还可以防止新打开的页面控制传递流量的页面。

rel="noreferrer"属性与rel="noopener"属性具有相同的作用,并且还将防止将引荐来源标头发送到新页面。

大多数现代浏览器都支持noopener,但是当不支持noopener时,我们可以使用noreferrer。实际上,将它们都用于支持较旧的浏览器是很有意义的。也没有充分的理由删除rel="noopener",因为它似乎没有任何缺点,并且已被广泛考虑。

答案 1 :(得分:-1)

当您链接到可能受到恶意代码影响的外部网站时,该网站可以利用window.opener JavaScript属性通过在页面的同一进程上运行来窃取受众的数字信息。 / p>

因此,通过在链接中添加rel noopener或rel noreferrer,将阻止新选项卡利用JavaScript window.opener功能。

rel =“ noopener”属性可保护window.opener属性访问新页面,并确保它在单独的进程中运行。

rel =“ noreferrer”属性具有类似的质量,但是它也阻止了将引荐来源信息传递到新页面。