G4.08.5outbound jumps may leak referrer data设计研究

外部跳转可能携带来源信息,隐私敏感场景需说明或阻断

别名: 来源泄露 · referrer leakage · noreferrer · 外链隐私

概念解释

浏览器默认会把「我从哪一页点过来」发给目标站,写在 Referer 头或后继的 referrer 策略里。来源 URL 可能含有病历号、重置密码的 token、未公开的草稿路径、内网主机名。外部跳转携带来源:目标站、沿途的 CDN、有时还有他们的分析脚本,会看到人刚刚在哪个敏感地址上。隐私敏感的产品要么切断这份携带,要么在跳转前说明会带出什么;不能只把链画成普通外链。

机制

来源本是给目标站做日志和防盗链的。它顺便把路径泄露出去。Referrer-Policy 可以把泄露收到 origin、收到同源、或收到无。rel="noreferrer" 还能顺带去掉 window.opener,避免新开页通过 opener 操原来的文档。默认策略随浏览器版本变过,产品不声明就等于把当前浏览器的默认暴露给用户——而用户看不见头。

泄露的不是「访问过这个品牌」,而是这一页的具体坐标。邮件里的退订链、分享出去的带 token 的预览、后台的 /patients/18/notes 被当成普通外链点到第三方客服组件,第三方就拿到了那条路径。敏感场景里「说明」要说的是会不会带路径,不是「这是外部网站」。阻断是更硬的一层:敏感页上的外链默认 no-referrer,或改写成中转页剥掉头再 302。中转页自己若再泄露,阻断失败。

怎么研究

在含敏感路径的页上点外链,在目标站(或测试接收端)读 Referer,比较默认、strict-origin-when-cross-originno-referrer、以及是否在跳转前告知。

  • 因变量:目标是否收到完整路径、人是否知道会带出当前地址、敏感 token 是否出现在来源头。
  • 自变量:策略、是否新窗口、是否经过站内中转。
  • 方法论注意点:HTTPS 到 HTTPS 的默认策略已经比早年收敛,实验室若只测「品牌 origin 被看到」会低估路径泄露,也高估「已经安全」。必须用带标识符的路径当刺激。不要把 cookie 跨站和 referrer 混成一个隐私分数。

边界

公开的营销页、文档站,来源对目标站往往是对方指望的分析数据,切断会破坏对方的归因,不必当敏感场景。用户主动复制地址栏分享,来源策略管不到。站内跳转不是外部携带。部分分析脚本用自己的跳转包装外链,产品的 noreferrer 管不到脚本自己发出的请求,要在脚本配置里另关。

怎么落地

  • 为含标识符的页面设 Referrer-Policy: no-referrer 或至少 strict-origin-when-cross-origin;敏感页上的外链加 rel="noreferrer noopener"
  • 后台、病历、带 token 的邮件落地页,外链走剥掉头的中转,或在跳转前写明「对方将知道你来自本页」。
  • 审计外链不要只看 href,包括第三方小部件拉起的跳转。
  • 验证:在 URL 带内部 id 的页点外链,在接收端看头。出现完整路径即失败。再在该页打开一次带 noopener 的新窗口,原页的 document 不应能被对面读到。公开博客用默认策略可以放过,不要和病历页共用一个全局过宽的 policy。

延伸

  • 同组G4.08.1 外部链接需与站内链接在视觉上可区分,让用户预判跳转后果 · G4.08.2 未保存改动时离开当前页面需拦截提示,而非静默丢弃 · G4.08.3 跳转到外部域名涉及信任转移,高风险场景需二次确认 · G4.08.4 离开提示只用于有实际数据丢失风险的场景,滥用会致使用户脱敏
  • 相邻G4.04 新窗口与原地跳转 · O1.02 数据最小化 · O3.17 敏感信息的屏幕暴露
  • 站内检索referrer leakage · noreferrer · Referrer-Policy

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/G4.08.5