提示:在使用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"属性。