必须通过nginx等反向代理配置add_header referrer-policy "strict-origin-when-cross-origin" always;,才能全局、可靠地在跨站跳转时剥离敏感url参数,覆盖脚本请求、资源加载及错误页等所有场景。

必须通过反向代理(如 Nginx)配置 HTTP 响应头 Referrer-Policy,且值设为 strict-origin-when-cross-origin,才能在跨站跳转时可靠剥离敏感 URL 参数。仅靠前端 HTML 属性或 meta 标签无法覆盖脚本请求、资源加载和错误页等关键场景。
反向代理层统一配响应头(核心步骤)
这是唯一能全局生效的方式,覆盖所有本域发起的出站请求,包括 JS 的 fetch()、图片懒加载、iframe 资源、字体/CSS 加载,甚至 4xx/5xx 错误页面。
- Nginx 配置示例(需加 always 参数):
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
always 确保错误页(如 /admin?session=abc 报 404)也受保护,避免敏感路径意外泄露 - Nginx Proxy Manager 用户:修改模板文件 _hsts.conf,在末尾添加上述行,重启生效
- Tomcat 用户:在 conf/web.xml 中启用 HttpHeaderSecurityFilter,设置 referrerPolicy 初始化参数为该值
为什么不能只靠前端标签属性
referrerpolicy 属性只对特定标签单次请求有效,且存在明显盲区:
- 它只作用于 、
、、<script></script>、 等主动发起请求的元素,对
、 完全无效- 用户右键“在新标签页打开”链接时,该属性不生效,仍走浏览器默认策略
- 埋点 SDK、广告脚本、动态创建的 new Image().src 等行为完全不受控制
外链跳转要额外加 rel="noreferrer"
对于明确指向第三方站点的 标签,rel="noreferrer" 比 referrerpolicy="no-referrer" 更彻底:
- 它不仅清空 Referer 头,还隐式启用 noopener,防止新开页面通过 window.opener 反控原页
- 不依赖 JavaScript,静态页、SEO、旧浏览器兼容性都好
- 示例:查看统计
避开高危配置陷阱
以下做法会直接导致敏感参数泄露,务必规避:
- 禁用 unsafe-url:它强制发送完整 URL(含 ?token=xxx、?user_id=123),生产环境绝对不可用
- 不用 no-referrer 作为全局策略:它虽最严,但会破坏同源跳转的调试、埋点归因和部分 CDN 路由逻辑
- 不依赖 :它只影响后续导航(点击、表单提交),对 JS 请求无效,且会被响应头覆盖











