标准答案

  1. target="_blank" 会在新窗口打开链接,新页面在某些场景下可以通过 window.opener 拿到原页面引用。
  2. 如果外链页面不可信,它可能通过 opener 把原页面跳到钓鱼地址,这类风险通常叫 reverse tabnabbing。
  3. noopener 的作用是切断新页面对 window.opener 的访问,让新窗口不能控制原窗口。
  4. noreferrer 会进一步阻止发送 Referer 请求头,通常也会包含 noopener 效果,但它可能影响来源统计。
  5. 所以外部链接用 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,导致来源统计丢失。

作者信息