说说你对target="_blank"的理解?有啥安全性问题?如何防范?
target="_blank" 是 HTML 中的一个属性,通常用于 <a> 标签(即超链接)。当这个属性被设置时,点击该链接会在新的浏览器窗口或标签页中打开链接的目标网页,而不是在当前窗口或标签页中打开。
安全性问题
使用 target="_blank" 时,确实存在一个安全性问题,被称为“反向 Tabnabbing”或“Reverse Tabnabbing”。这个问题主要发生在以下场景:
- 用户在你的网站上点击了一个带有
target="_blank"的链接,这会在新的标签页中打开另一个网站。 - 如果新打开的网站是恶意的,它可以通过 JavaScript 尝试修改
window.opener(即打开它的原始页面)的location,从而将原始页面导航到一个恶意页面。 - 如果用户在不知情的情况下回到了原始页面(可能还在同一个浏览器会话中),他们可能会看到已经被篡改的内容,这可能导致各种安全问题,如钓鱼攻击或信息泄露。
防范措施
为了防范这种攻击,你可以采取以下措施:
-
使用
rel="noopener noreferrer":noopener:这个值会阻止新打开的页面通过window.opener访问原始页面。这样,即使新页面是恶意的,它也无法修改原始页面的内容。noreferrer:这个值会阻止浏览器发送 HTTP Referer 头,这有助于保护用户的隐私。虽然这与反向 Tabnabbing 直接关系不大,但通常建议与noopener一起使用以增强安全性。
<a href="https://example.com" target="_blank" rel="noopener noreferrer">链接</a>
- 教育用户:让用户了解这种攻击的存在,并教导他们在浏览网页时要保持警惕。当然,作为开发者,你应该尽可能地通过技术手段来保护用户。
- 限制外部链接:如果可能的话,限制或审核你的网站上允许出现的外部链接。这可以降低用户点击恶意链接的风险。
- 使用 Content Security Policy (CSP):CSP 是一种安全机制,可以帮助你指定哪些外部资源可以被加载到你的网站上。通过合理配置 CSP,你可以进一步增强网站的安全性。
总的来说,rel="noopener noreferrer" 是目前防范反向 Tabnabbing 攻击的最佳实践。在开发过程中,确保所有使用 target="_blank" 的链接都包含了这个属性组合。
浙公网安备 33010602011771号