[FAQ] a 链接的 rel=noopener 含义
HTML中的 <a>
标签的 rel
属性用于定义与链接文档的关系。
当 rel="noopener"
被使用时,它表示链接的目标文档不应该拥有对原始文档的任何引用能力。
具体来说,这意呈现在以下几点:
1 . 安全增强:
当一个链接在一个新的浏览上下文中打开(例如一个新的标签页或窗口),rel="noopener"
可以防止目标页面通过 window.opener
属性访问或操纵打开它的窗口。
这有助于防止一些类型的攻击,如利用 window.opener
进行的潜在安全漏洞。
2. 资源隔离:
目标页面不能通过脚本访问打开它的窗口,这意味着它不能改变原始页面的状态或者读取其任何数据,从而增加了用户的安全性和隐私。
3.兼容性:
使用 rel="noopener"
时,即使链接的目标被设置为 _blank
,也会有默认的 rel="noopener"
行为。这保证了即使在没有显式设置 rel
属性的情况下,也能获得基本的安全保护。
然而,值得注意的是,rel="noopener"
并不阻止 referrer header 的发送,如果需要进一步保护隐私,可以结合使用 rel="noreferrer"
。
noreferrer
会阻止referrer header的发送,这样目标页面就无法知道是从哪个页面链接过来的。
因此,为了同时达到安全和隐私保护的目的,通常会看到rel="noopener noreferrer"
这样的组合使用。