在HTML中,<a>
标签的 rel
属性用于定义当前文档与被链接文档之间的关系。rel="noopener"
是其中的一个值,它主要的作用是在打开新窗口或新标签页时,防止新页面通过 window.opener
属性访问到原页面的 window
对象。这可以提高网站的安全性,防止一些潜在的跨站脚本攻击(XSS)或反向Tabnabbing攻击。
具体来说:
- 安全性:如果不使用
noopener
,新打开的页面(通过target="_blank"
)可以通过JavaScript的window.opener
属性访问到原页面的window
对象,这可能导致安全问题。例如,恶意页面可能会修改原页面的内容或通过原页面的权限执行一些操作。使用noopener
可以阻止这种访问,从而提高安全性。 - 防止反向Tabnabbing:这是一种攻击方式,恶意页面在新标签页打开后,通过
window.opener
悄悄地将原页面导航到一个伪造的钓鱼页面,用户在不知情的情况下可能在原页面输入敏感信息,从而被攻击者获取。noopener
可以防止这种攻击。
因此,当使用 <a>
标签打开新窗口或新标签页时(即使用 target="_blank"
),建议同时加上 rel="noopener"
,以确保安全。在较新的浏览器中,你还可以使用 rel="noopener noreferrer"
,其中 noreferrer
表示不传递Referer信息给新页面,这也可以增加一定的安全性。不过请注意,noopener
已经隐含了 noreferrer
的行为,在大部分现代浏览器中,只需设置 noopener
就足够了。