只有noopener和noreferrer会影响浏览器安全行为:noopener阻止新页面通过window.opener访问原页面,noreferrer还禁发referer头;二者必须配合target="_blank"才生效,其他rel值如nofollow、external对安全无实质作用。

rel 属性没有“所有取值”的官方穷举列表,HTML 标准只定义了一组**规范值(valid values)**,其余是扩展或历史遗留值;在链接安全中,真正起作用的只有 noopener 和 noreferrer,且必须配合 target="_blank" 才有意义——其他值如 nofollow 或 external 对安全无实质影响。
哪些 rel 值会影响浏览器安全行为
只有两个值会直接改变新页面的执行上下文和请求头:
-
noopener:阻止新打开的页面通过window.opener访问原页面的window对象,避免钓鱼或 DOM 劫持 -
noreferrer:不仅包含noopener效果,还会让浏览器不发送Referer请求头,防止目标站获知来源 URL - 二者可共存:
rel="noopener noreferrer"是当前最稳妥的写法 -
nofollow、external、ugc等纯属 SEO 语义,浏览器完全忽略其安全含义
为什么只对 a 标签 + target="_blank" 有效
noopener 和 noreferrer 的作用机制依赖于“新浏览上下文”的创建,而 HTML 中仅当 a 标签带 target="_blank"(或非 _self 的 target)时,浏览器才会新建一个独立的 browsing context。其他场景下设置它们无效:
-
<link rel="noopener" href="...">—— 语法合法但被浏览器静默忽略 -
<a href="..."></a>不带target—— 即使写了rel="noopener"也无实际效果 -
target="_self"或未声明target—— 页面仍在当前上下文中跳转,不存在 opener 风险
常见错误写法与后果
这些写法看似“更安全”,实则要么多余,要么掩盖真实风险:
- 只写
rel="noreferrer":现代 Chrome/Firefox 已自动补noopener,但 Safari 15.4 之前不兼容,仍有 opener 漏洞 - 写成
rel="nofollow noopener":nofollow对安全零贡献,还可能误导后续维护者以为“已加固” - 给内部跳转加
noopener(如<a href="/about" target="_blank"></a>):没必要,且增加内存开销(新上下文无法复用) - 误以为
rel="external"能防 XSS:它只是语义标记,浏览器不据此隔离上下文
真正关键的不是“用了多少 rel 值”,而是是否理解 noopener 的触发条件和浏览器兼容边界——Safari 15.4 是分水岭,此前版本必须显式同时写 noopener noreferrer 才可靠。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











