target=_blank 隐含 rel=noopener (#今日学到)

target=_blank 隐含 rel=noopener (#今日学到)

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

本文讨论了target="_blank"的安全问题,介绍了使用rel="noopener"来防止目标网站访问你的网站的方法。现在,浏览器已经默认将rel="noopener"隐式应用于target="_blank",但关于rel="noopener"的建议仍然存在。

🔎

延伸解读

浏览器默认行为已改变

文章指出,从2024年起,浏览器已默认将rel="noopener"隐式应用于target="_blank"。这意味着即使开发者没有显式添加rel="noopener",新打开的页面也无法通过window.opener访问原页面,从而消除了恶意网站篡改原页面URL的风险。这一变化简化了安全实践,但许多开发者可能尚未意识到。

历史风险与攻击场景

在旧版浏览器中,使用target="_blank"时,目标页面可以通过window.opener访问原页面,并利用JavaScript修改原页面的location。攻击者可能通过XSS注入此类链接,当用户点击后,原页面被重定向到恶意网站以窃取凭证。虽然实际攻击需要特定条件,但风险确实存在。

过时建议仍广泛流传

尽管浏览器已默认提供保护,互联网上仍充斥着添加rel="noopener"的建议。这可能导致开发者困惑,甚至在不必要的情况下添加冗余属性。文章认为,这种过时信息的持续传播使得target="_blank"的安全问题看似依然存在,实际上已得到缓解。

❓

Q&A

为什么使用target="_blank"会存在安全隐患?

使用target="_blank"时,目标网站可以通过window.opener访问原网站,可能导致恶意网站更改原网站的URL。

如何使用rel="noopener"来提高安全性?

通过在链接中添加rel="noopener",可以防止目标网站访问原网站,从而提高安全性。

浏览器对rel="noopener"的支持情况如何?

从2024年开始,浏览器将默认隐式应用rel="noopener",即使用户未显式添加该属性。

target="_blank"和rel="noopener"的组合有什么作用?

组合使用target="_blank"和rel="noopener"可以在打开新标签的同时,防止目标网站访问原网站。

为什么互联网上仍然有关于rel="noopener"的建议?

尽管浏览器将隐式应用rel="noopener",但互联网上仍然存在关于其使用的建议,以提高用户的安全意识。

使用target="_blank"时可能面临哪些攻击?

可能面临的攻击包括XSS攻击,攻击者可以通过注入恶意链接来更改原网站的URL。

🏷️

标签

➡️

继续阅读