Web 安全响应头是什么
一组响应头能以很低的改造成本提升浏览器侧安全性:CSP 限制资源加载,HSTS 强制 HTTPS,X-Content-Type-Options 阻止 MIME 嗅探,X-Frame-Options 或 CSP 的 frame-ancestors 防点击劫持,Referrer-Policy 控制 Referer 泄露,Permissions-Policy 限制摄像头、定位等浏览器能力。它们最适合统一在网关或 CDN 层配置。
基本信息
| 下发位置 | 网关、CDN 或应用层(建议统一到网关) |
|---|---|
| 生效前提 | 响应确实带上头,含 4xx/5xx 响应 |
| 主要作用 | 浏览器侧纵深防御,不修复服务端漏洞 |
| 验证方式 | 浏览器开发者工具、curl -I、在线响应头检查 |
Nginx 统一配置示例
Nginx 统一配置示例
add_header Content-Security-Policy "default-src 'self'" always; # 资源白名单,先收后放
add_header X-Content-Type-Options "nosniff" always; # 禁止浏览器猜类型
add_header X-Frame-Options "DENY" always; # 防嵌套,旧浏览器兜底
add_header Referrer-Policy "strict-origin-when-cross-origin" always; # 控制 Referer 外泄
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; # 关闭不需要的浏览器能力
add_header Strict-Transport-Security "max-age=31536000" always; # 仅在确认全站 HTTPS 后启用头部与防御目标
| 头部 | 防御目标 |
|---|---|
| CSP | XSS 与资源注入 |
| HSTS | SSL 剥离与降级 |
| X-Content-Type-Options | MIME 嗅探 |
| X-Frame-Options / frame-ancestors | 点击劫持 |
| Referrer-Policy | Referer 信息泄露 |
| Permissions-Policy | 浏览器特性滥用 |
上线后验证
上线后验证
curl -sI https://www.example.com/ | grep -iE 'strict-transport|content-security|x-content-type|x-frame|referrer|permissions'
curl -sI https://www.example.com/not-exist-404 | grep -ic 'x-content-type-options' # 确认错误页也带头
# 应用层与网关同时配置时会出现重复头,浏览器可能只认第一条,需去重典型使用场景
- 新站点上线检查:把安全头纳入上线检查单,改造成本低、收益直接
- 等保与合规整改:安全头常作为基础加固项被核查
- 漏洞报告缓解:XSS 修复排期长时,先用 CSP 降低利用成功率
- 多域名统一治理:在 CDN 或网关集中下发,避免各应用各写一套
- 排查线上问题:安全头配置错误(如过严 CSP)会导致页面白屏,需能快速回滚
安全头不能修复漏洞,只是纵深防御的一层;上线后用开发者工具或响应头检查工具确认实际下发,尤其要确认错误页与 API 响应是否也带上。
HSTS 是有状态且不易回退的配置:一旦给主域设置了较长 max-age 并加上 includeSubDomains,某个只支持 HTTP 的子域会立即不可访问,启用前先梳理全部子域。