标准答案
- target="_blank" 会在新窗口打开链接,新页面在某些场景下可以通过 window.opener 拿到原页面引用。
- 如果外链页面不可信,它可能通过 opener 把原页面跳到钓鱼地址,这类风险通常叫 reverse tabnabbing。
- noopener 的作用是切断新页面对 window.opener 的访问,让新窗口不能控制原窗口。
- noreferrer 会进一步阻止发送 Referer 请求头,通常也会包含 noopener 效果,但它可能影响来源统计。
- 所以外部链接用 target="_blank" 时通常加 rel="noopener noreferrer";如果业务必须保留来源统计,可以只用 noopener。
题目解析
- noopener:阻止新页面通过 window.opener 操作原页面。
- noreferrer:不发送 Referer 来源信息,通常也会阻止 opener。
- nofollow:告诉搜索引擎不要把链接作为普通背书信号,和窗口安全不是一回事。
这题的核心不是背 rel 字符串,而是理解新窗口和原窗口之间可能存在 opener 关系。
noreferrer 会影响来源信息。如果产品依赖 Referer 做统计或风控,需要确认是否可以接受。
代码示例
新窗口打开不可信外链时,显式加上 rel 更稳妥。
HTML
<a
href="https://external.example.com"
target="_blank"
rel="noopener noreferrer"
>
查看外部文档
</a>常见误区
- 只写 target="_blank",不处理 opener 风险。
- 把 noreferrer 和 nofollow 混为一谈。前者控制来源信息,后者偏搜索引擎链接信号。
- 所有外链都无脑 noreferrer,导致来源统计丢失。