直接答案:25 个首页中,只有 5 个返回 HSTS、11 个返回 CSP;把 X-Frame-Options 与 CSP 的 frame-ancestors 合并后,14 个有防嵌入声明;nosniff 6 个、Referrer-Policy 4 个、Permissions-Policy 1 个。7 个站点六项全无(28%),没有一个站点六项齐全;另有 4 个站点仍以 HTTP 打开,6 个通过响应头暴露版本信息。
本期只读响应头,不抓正文,也不测试浏览器实际行为;6 项覆盖分只是汇总,不是安全评级。
方法:一次请求,只读响应头
沿用第 4 期的首页样本,2026-11-03 11:41–11:42 串行重访,站间 ≥0.8 秒,只读响应头与最多 64 KB 正文。26 个候选 URL 中 25 个返回 200,E21 返回 502,未计入统计。
| 项 | 判定 | 边界 |
|---|---|---|
| HSTS | 存在 Strict-Transport-Security | 另记 max-age 与子域/preload 标记 |
| CSP | 存在 Content-Security-Policy | Report-Only 单列,不计入强制 CSP |
| 防嵌入 | XFO 为 DENY/SAMEORIGIN,或 CSP 含 frame-ancestors | 无效 XFO 值不计 |
| nosniff | X-Content-Type-Options 含 nosniff | — |
| Referrer / Permissions | 响应头存在 | 不判断策略宽窄 |
| 版本泄露 | Server 含数字,或存在 X-Powered-By | 不判断具体版本风险 |
结果:覆盖不均,HSTS 最少
| 响应头 | 站点数 | 占 25 |
|---|---|---|
| CSP | 11 | 44.0% |
| 防嵌入(XFO 或 frame-ancestors) | 14 | 56.0% |
| HSTS | 5 | 20.0% |
| nosniff | 6 | 24.0% |
| Referrer-Policy | 4 | 16.0% |
| Permissions-Policy | 1 | 4.0% |
| 覆盖分(0–6) | 站点数 | 说明 |
|---|---|---|
| 0 | 7 | 六项全无 |
| 1 | 6 | — |
| 2 | 7 | — |
| 4 | 4 | — |
| 5 | 1 | — |
| 6 | 0 | 无站点齐全 |
中位覆盖分为 1 分。分布呈两极:7 个站点 0 分,同时有 5 个站点达到 4 分以上。
HSTS:5 站,全部 max-age 一年
- 5 个站点返回 HSTS,max-age 都是 31,536,000 秒(一年)。
- 其中 3 个带 includeSubDomains,0 个带 preload。
- 另有 4 个站点仍以 HTTP 打开(最终 URL 非 HTTPS),这些站点没有 HSTS。
HSTS 只对 HTTPS 响应有意义;仍停留在 HTTP 的站点,即使想开启也需要先完成 HTTPS。
防嵌入:XFO 与 frame-ancestors 各占一半
| 方式 | 站点数 | 说明 |
|---|---|---|
| 仅 X-Frame-Options | 7 | 全部为 SAMEORIGIN |
| 仅 CSP frame-ancestors | 7 | 无 XFO,但 CSP 声明了 frame-ancestors |
| 两者都有 | 0 | — |
| 都没有 | 11 | 其中 1 个使用已废弃的 ALLOW-FROM |
XFO 与 CSP 是两条互补路径,合并后 14 个站点有防嵌入声明;只统计 XFO 会漏掉 7 个只在 CSP 里声明的站点。
版本信息与协议
- 版本泄露:6 个站点,其中 3 个 Server 头带数字版本,4 个返回 X-Powered-By(两类有重叠)。
- Server 头:最常见的是通用标识(6 个站点返回同一通用值),另有 nginx、Apache、Tengine 等,部分不带版本号。
- 协议:21 个最终为 HTTPS,4 个仍是 HTTP(E04、E13、E16、E27)。
- Report-Only CSP:0 个;本期没有站点用报告模式试运行 CSP。
对验收的启示
- 先确认 HTTPS,再谈 HSTS。 4 个站点仍以 HTTP 打开,HSTS 无从生效。
- 防嵌入要合并两种写法。 只看 XFO 会把 7 个使用 frame-ancestors 的站点误判为缺失。
- HSTS 的 max-age 不是越长越好。 本期 5 站都设一年,但都没有 preload;是否加入 preload 需要独立评估。
- 六项全无的 7 个站点优先处理。 先加 nosniff 与防嵌入,再逐步上 CSP。
- 版本泄露单独列。 6 个站点暴露版本信息,不等于存在漏洞,但会增加被针对性扫描的概率。
局限
- 单次请求:2026-11-03 11:41–11:42 抓取一次,CDN/WAF 可能按地区或时间返回不同头。
- 只读响应头:不验证 TLS 配置、证书链、HSTS preload 列表状态或浏览器实际拦截行为。
- 不评估策略质量:CSP 是否存在不等于策略足够严格;Permissions-Policy 同理。
- 分值只是汇总:0–6 分不构成合规或安全结论。
- 25 家 pilot:不外推行业。
数据与复算
匿名数据:equipment-security-headers-2026.csv(25 行 × 20 列:HSTS 及参数、CSP、XFO、frame-ancestors、nosniff、Referrer、Permissions、Server、X-Powered-By、覆盖分、协议)。仓库内为 docs/research/2026-11-security-headers.csv。
解析:scripts/security_headers_probe.py;单元测试 scripts/test_security_headers_probe.py(10 项,无网络)。运行:
python -m unittest scripts.test_security_headers_probe
配套:文章页 Head 元数据 pilot、HTTP 日期响应头 pilot、协议与主机名 pilot。
数据来源与口径
- 首页样本:第 4 期 25 个首页(同一批 sample_id)。
- 抓取:2026-11-03 11:41–11:42(Asia/Shanghai),串行、站间 ≥0.8 秒。
- 判定:按响应头字面值,头名大小写不敏感;Report-Only CSP 单列。
- 覆盖分:6 项各 1 分,仅用于汇总。