安全响应头组合
安全响应头是 HTTPS 之外的一层纵深防御:HSTS 阻止降级与证书错误时的继续访问,X-Content-Type-Options 禁止浏览器猜测内容类型,Referrer-Policy 控制跨站 Referer 泄露,X-Frame-Options 防点击劫持,Permissions-Policy 按需关闭浏览器能力。它们的共同特点是不改动业务逻辑,却能明显压缩常见 Web 攻击的可利用面。
基本信息
| HSTS | 强制后续使用 HTTPS,注意 max-age 与 includeSubDomains 的影响 |
|---|---|
| X-Content-Type-Options | 取值 nosniff,禁止浏览器猜测内容类型 |
| Referrer-Policy | 常用 strict-origin-when-cross-origin |
| X-Frame-Options | DENY 或 SAMEORIGIN;新项目可用 CSP frame-ancestors 替代 |
| Permissions-Policy | 按需关闭摄像头、麦克风、地理位置等浏览器能力 |
| 生效前提 | 覆盖全部响应,包括错误页与静态资源 |
典型使用场景
- 站点安全加固:补齐基础响应头并纳入发布检查清单
- 排查点击劫持与内容嗅探问题:确认相关响应头是否真实生效
- HSTS 灰度上线:先设较短 max-age,验证无误后再逐步延长
- 兼容性评估:需要被他站嵌入的页面要放宽 frame 限制
- 例行巡检:用命令行抓取响应头,确认没有漏配或被中间层覆盖
nginx 追加响应头
nginx 追加响应头
add_header X-Content-Type-Options nosniff always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
add_header X-Frame-Options SAMEORIGIN always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
# always 让错误响应也带上这些头,避免错误页成为缺口头与影响
| 响应头 | 主要作用 | 开启后的影响 |
|---|---|---|
| HSTS | 强制 HTTPS,压缩降级空间 | includeSubDomains 会波及全部子域,需谨慎 |
| X-Content-Type-Options | 禁止 MIME 嗅探 | 类型配置错误会更容易暴露 |
| Referrer-Policy | 控制 Referer 泄露 | 依赖 Referer 的统计需要复核 |
| X-Frame-Options | 防点击劫持 | 被嵌入的页面会直接失效 |
| Permissions-Policy | 关闭不需要的浏览器能力 | 依赖定位等功能需单独放行 |
响应头属于纵深防御的一层,需要与业务功能联动评估:例如要被他站 iframe 嵌入的页面必须放宽 X-Frame-Options。
关键头要检查覆盖范围:登录页、错误页与静态资源往往落在不同 location 中,漏配一处就留下缺口,逐路径抓取响应头比只看配置可靠。
HSTS 的 max-age 一旦被浏览器记住,在有效期内即使证书出问题也无法点击继续访问;首次上线建议先用短周期验证再延长。