提示:在使用target="_blank"时保护用户免受恶意网站的侵害
通常情况下,当我们从网站链接到外部资源时,我们会使用target="_blank"
在新的标签页或窗口中打开链接的页面。但是,我们应该意识到存在一个安全风险。新的标签页通过Window.opener
获得对链接页面(即我们的网站)的有限访问权限,然后可以通过Window.opener.location
来更改链接页面的URL(这被称为tabnabbing)。
如果外部资源不可信、可能被黑客攻击、域名多年来更换了所有者等,这可能是一个问题。无论多么可信任,都不能保证第三方资源实际上可以信任我们用户的安全性,作为开发者,我们应该始终意识到这个风险。
<!-- 不好:容易受到tabnabbing攻击 -->
<a href="https://externalresource.com/some-page" target="_blank">
外部资源
</a>
<!-- 好:新标签页不会引起问题 -->
<a
href="https://externalresource.com/some-page"
target="_blank"
rel="noopener noreferrer"
>
外部资源
</a>
为了防止在新标签页中打开的链接引起任何问题,我们应该始终为所有的target="_blank"
链接添加rel="noopener noreferrer"
属性。