登录
首页 >  文章 >  前端

HTML链接安全设置:noopener防钓鱼指南

时间:2026-02-13 23:15:47 342浏览 收藏

在使用 HTML 的 `` 标签配合 `target="_blank"` 打开新页面时,若未添加 `rel="noopener"` 属性,恶意网站可通过 `window.opener` 劫持原始页面,实施钓鱼或跳转攻击;而 `rel="noopener noreferrer"` 是最直接、高效且兼容性良好的防御方案——前者彻底切断新页面对原窗口的访问权限,后者额外防止 Referer 信息泄露,既保障安全又兼顾隐私;对于用户生成内容或第三方组件,建议在服务端自动注入该属性,避免手动遗漏,真正实现“一次配置、全局防护”。

HTML a 标签 target=\

使用 a 标签的 target="_blank" 时,新打开的页面会通过 window.opener 获得对原始页面的引用权限,攻击者可借此调用 window.opener.location = 'https://evil.com' 等方式劫持原页面跳转,实施钓鱼或中间人攻击。关键防护手段是切断这种跨窗口控制链。

添加 rel="noopener noreferrer"

这是最直接有效的防御方式。现代浏览器中,加上这两个属性后,新页面的 window.opener 将为 null,彻底阻断恶意脚本对原页面的操作能力:

安全外链

注意:noopener 是核心防护项,noreferrer 是补充(还能阻止 Referer 泄露),二者常一起使用。仅写 rel="noopener" 已足够防御 opener 劫持。

避免依赖 JavaScript 模拟 target="_blank"

有人试图用 onclick="window.open(...)" 替代原生 target,但若未显式传入 opener: null 选项,仍可能保留 opener 引用(尤其在某些浏览器或配置下):

  • ❌ 不安全写法:onclick="window.open('https://x.com')"
  • ✅ 安全写法:onclick="window.open('https://x.com', '_blank', 'noopener')

推荐优先使用原生 HTML + rel 属性,语义清晰、兼容性好、无需 JS 支持。

服务端或 CMS 可自动补全 rel 属性

对于大量用户生成内容(如博客评论、富文本编辑器输出),手动加 rel 易遗漏。可在服务端渲染或前端富文本解析阶段统一处理:

检查第三方组件和框架默认行为

部分 UI 组件库(如旧版 Ant Design、某些 Markdown 渲染器)或 CMS 插件可能默认生成不带 reltarget="_blank" 链接。上线前应:

  • 审查生成的 HTML 源码
  • 查阅组件文档是否支持配置 linkRel 类似参数
  • 必要时通过 DOM 遍历脚本动态补全(仅作兜底,不替代服务端修复)

到这里,我们也就讲完了《HTML链接安全设置:noopener防钓鱼指南》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>