内容提要
本文讨论了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。