HTTP 安全响应头检查工具
为站点的 HTTP 安全响应头评分,并说明每个缺失项会暴露什么。
🌐 sitekits fetches the URL server-side (private/internal addresses are blocked). Only response headers are read — the body is never retrieved.
概述
安全响应头是站点防御中完全存在于响应里的部分,因此易于检查,也易于在细节上出错。
响应头可以存在却毫无作用:max-age=0 会关闭 HSTS,含 'unsafe-inline' 的 CSP
照样执行被注入的 <script>,而 X-Frame-Options: ALLOW-FROM 会被今天所有在售
浏览器忽略。
本工具在服务器端获取该 URL,只读取响应头,并按加权百分制为七个项目评分。权重反映 每一项实际防住了什么,每个分数都附有指出具体暴露面的备注,而不是笼统的「缺少响应头」。
使用方法
- 粘贴 URL。可省略协议,默认按
https处理。 - 阅读等级与各项分数。
- 依次处理备注。每条描述的是被暴露的内容,而不只是缺了什么。
权重的含义
只数响应头会把所有缺失一视同仁,而实际并非如此:缺少 X-Frame-Options 可以由 CSP
的 frame-ancestors 覆盖,而缺少 CSP 则没有任何替代。
| 项目 | 权重 | 理由 |
|---|---|---|
Content-Security-Policy | 25 | 唯一能阻止被注入脚本执行并外传数据的响应头 |
Strict-Transport-Security | 20 | 阻止首次请求被降级为 HTTP |
| 嵌入保护 | 15 | 点击劫持;由 CSP frame-ancestors 或 X-Frame-Options 满足 |
X-Content-Type-Options | 10 | 错误的 content-type 被重新解释为脚本 |
Referrer-Policy | 10 | 您的 URL 有多少会泄漏到其他来源 |
Permissions-Policy | 10 | 摄像头、麦克风与地理位置被隐式放开 |
| 版本信息披露 | 10 | 这是扣分项,不是保护项——见下文 |
取值的读法
CSP 从 100 分起算,按实际削弱它的因素扣分。有效 script-src 中的
'unsafe-inline' 扣 45 分——但仅当既无 nonce 也无 hash 时,因为理解它们的浏览器
会完全忽略 'unsafe-inline'。'unsafe-eval' 扣 20 分。缺少 base-uri 扣 15 分:
没有它,被注入的 <base> 元素会改写页面上所有相对 URL,脚本地址也包括在内。
缺少 object-src 'none' 扣 10 分。只设置
Content-Security-Policy-Report-Only 得 0 分,因为它什么都不拦——那是测量手段,
不是防御。
HSTS 按 max-age 评分:一年及以上得 80 分,六个月得 60 分,更短得 35 分,
max-age=0 得 0 分,因为它关闭了 HSTS。includeSubDomains 加 20 分,正确配置的
响应头正是靠这一项达到 100 分。六个月同时是浏览器预加载列表的下限,因此更短的取值
无论意图如何都无法预加载。
嵌入保护由 CSP frame-ancestors 满足可得满分,X-Frame-Options: DENY /
SAMEORIGIN 得 60 分——它仍然有效,但规范已经向前走了。ALLOW-FROM 得 0 分:
Chrome 从未实现,Firefox 在 70 版移除,因此依赖它的页面可被嵌入。
版本信息披露是唯一的扣分项。Server: Apache/2.4.41 与
X-Powered-By: PHP/7.4.3 会准确告知攻击者该试哪些已公开的 CVE,而两者都不保护
任何东西。不含版本号的取值(例如 Server: cloudflare)不扣分:多数 CDN 总是发送
它且无法移除,扣分就成了谁也无法修正的项目。
本工具看不到的内容
响应头只是其中一层。满分并未说明您的 TLS 配置、Cookie 的属性、认证是否真正强制, 或者您的 CSP 允许的某个来源本身是否托管着受攻击者控制的内容。
Set-Cookie 的属性尤其不在评分范围内,因为它们以单个 Cookie 为单位而非以响应为
单位:缺少 HttpOnly 与 Secure 的会话 Cookie 是严重问题,而任何响应头评分都
不会显示出来。
CSP 也是按语法与关键字评分,而不是按您的允许列表评分。策略
script-src 'self' https://cdn.example.com 可得满分,而若该 CDN 提供用户上传的
JavaScript,这条策略毫无保护作用。评分衡量策略的形态,来源是否妥当需要由人判断。
示例
- 确认改动是否已到生产环境 — 在修改 CDN 配置前后各评一次分。源站设置的响应头 被代理删除或覆盖是常见情况,而这是查看浏览器实际收到的响应的最快方式。
- 向团队说明发现 — 备注陈述的是机制,比审计表格里的一个响应头名称更有说服力。
- 检查重定向的目标 — 评分对象是最终响应的响应头。跳转到另一主机的落地页, 常常落在一个不具备入口页任何响应头的地方。
- 申请 HSTS 预加载之前 — 提交要求
max-age至少一年,并带includeSubDomains与preload。预加载难以撤销,因此请先在每个子域上确认响应头。 - 构建策略本身 — CSP 生成器按指令逐条组装响应头, 当您需要原样取值时,HTTP 响应头查看会显示完整的原始响应。
说明
评分对象是最终响应的响应头。若 URL 发生重定向,等级描述的是落点,同时显示跳转链, 以便发现入口与目的地响应头不一致的情况。
同一项目也接受 Feature-Policy 代替 Permissions-Policy,因为仍有服务器发送旧名
称。Referrer-Policy 在取值为 no-referrer、same-origin、strict-origin 与
strict-origin-when-cross-origin 时得满分;其他取值得一半,因为它们向其他来源
泄漏了超出必要范围的 URL 内容。
只处理响应头。本工具绝不获取、保存或转发响应正文,对私有地址、回环地址、链路本地 地址与保留地址的请求在建立任何连接之前即被拒绝——重定向之后也同样处理。详情见 隐私政策。