安全响应头检查

粘贴某个页面的响应头 ——curl -sI https://your-site.example/终端里那一堆,或浏览器 Network 面板里那一块 —— 就能得到A+ 到 F 的评级,依据是 OWASP 安全响应头清单:Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options、框架嵌套防护、Referrer-Policy, Permissions-Policy、跨源隔离三件套、版本泄露、已废弃的响应头与 Cookie 标志 —— 每条发现都配上nginx、Apache 和 Express 的修复配置行。全部在浏览器里运行,本页面绝不会去访问你的站点。
状态行可选。多行 Set-Cookie 都会被检查。想先有一份可供评级的策略,可以用CSP 生成器制定;想把响应头块逐行拆开看,请用HTTP 响应头解析器。
尚无评级。粘贴响应头并点击检查响应头,或者载入一个示例。
检查一次之后,每条发现对应的修复行会出现在这里。
本检查器与 SSL 安全检查的分工。本页面给安全响应头评级(即上面这份 OWASP 清单)。SSL 安全检查给HTTPS 配置评级:证书链、协议版本、加密套件强度与混合内容。HSTS 和 Cookie 标志在两页都会出现,因为两份清单都包含它们,但视角不同 —— 两个检查都跑一遍才是完整的图景。
自测
用固定的响应头块重跑评级器:好样本得 A+,差样本得 F 且每条扣分都被触发,逐条规则单独验证(得分的算术),版本泄露的上限,Cookie 提示,CSP 质量提示,frame-ancestors 也算框架嵌套防护,每一档评级阈值的两侧边界,修复配置片段,以及反向路径。不会向任何地方发送数据。
什么是安全响应头?
一句话:安全响应头是用来要求浏览器开启某种它自己推断不出来的防护的响应头 —— 绝不从未知来源加载脚本、绝不再对这个主机说明文 HTTP、绝不允许把本页放进框架 —— 而每一个的代价只是一条配置。
本页面评级的响应头
响应头防护对象OWASP 推荐值
Strict-Transport-Security首次明文 HTTP 请求被降级攻击、Cookie 被盗max-age=63072000; includeSubDomains
Content-Security-Policy跨站脚本、恶意嵌入内容、混合内容default-src 'self'; form-action 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests
X-Content-Type-OptionsMIME 类型混淆(脚本被当成图片提供)nosniff
X-Frame-Options / CSP frame-ancestors点击劫持(你的页面被攻击者放进框架)deny / 'none'
Referrer-Policy把带令牌的 URL 泄露给第三方站点no-referrer
Permissions-Policy页面与嵌入内容悄悄使用摄像头、麦克风、地理位置关闭所有特性
Cross-Origin-Opener-Policy其他窗口伸进你的浏览上下文same-origin
Cross-Origin-Embedder-Policy加载未主动声明加入的资源(启用进程隔离)require-corp
Cross-Origin-Resource-Policy你的资源被其他站点嵌入same-origin
评级是怎么算出来的

从 100 分开始扣分:缺失 CSP −25,缺失 HSTS −20,缺失 X-Content-Type-Options、Referrer-Policy 或任何框架嵌套防护各 −10,跨源三件套与 Permissions-Policy 各 −5,Server/X-Powered-By 的版本泄露 −5(封顶),X-XSS-Protection 非 0 值 −5。字母评级:100 = A+,90+ = A,80+ = B,70+ = C,60+ = D,其余 = F。提示类条目(Cookie 标志、缓存控制、CSP 质量)不扣分。

常见错误
  • 把响应头加在了错误的响应上。要给每一个响应都加上,包括错误页和跳转 —— nginx 的 add_header ... always; 与 Apache 的 Header always set 里的 always 就是干这个的。
  • 只测首页。代理、缓存和遗留应用常常只在某些路径上删掉或覆盖响应头。要检查真正要紧的页面:登录、结算、API 端点。
  • 还留着 X-XSS-Protection。它驱动的审查器自身就引发过漏洞,各浏览器已经移除它。现在非零值是故意要扣分的 —— 删掉它,让 CSP 来做这件事。
  • 以为 X-Frame-Options 还算现行方案。它无法允许特定来源,也不在 CSP 标准里;frame-ancestors 才是现代的替代品。过渡期两个都留着没问题 —— 本页面两者都接受。
  • 把版本横幅发出去。Server: Apache/2.4.58 (Unix) 会把攻击者搜索已知漏洞的范围收窄,对你却毫无好处。去掉版本号;顺手把响应头行数也降下来。
常见问题

为什么 COOP/COEP/CORP 每个只值 5 分?这三个是最新的那一层,主要在你想要进程隔离时才需要(SharedArrayBuffer、Spectre 加固)。没有它们的站点依然拥有核心防护;加上它们之后,某些跨源嵌入内容需要调整 —— 所以它们的权重低于 CSP 或 HSTS。

评级高就意味着站点安全吗?不是 —— 它只说明响应头设置到位了。安全响应头只是其中一层:TLS 配置、会话处理、输入校验和补丁更新才真正决定站点是否安全。TLS 那一层请再跑一遍SSL 安全检查。

为什么我的 Permissions-Policy 值这么长?OWASP 基线是把每一个特性都显式关掉,这样浏览器新增特性时也不会悄悄把它们重新打开。camera=(), microphone=(), geolocation=() 这种短值是个开始 —— 但要知道它留下了哪些没关。

能在这里检查任意站点的响应头吗?本页面绝不发起网络请求 —— 它只给你粘贴进来的文本评级,因此在防火墙后面和内网主机上都能用,你检查的内容一点也不会离开你的机器。取响应头只需在终端里跑一条 curl -sI。

那 Clear-Site-Data 和 X-Permitted-Cross-Domain-Policies 呢?它们在很窄的场景下有用(登出响应;旧的 PDF/Flash 查看器)。这里只作提示,不计分 —— 对每个响应都发 Clear-Site-Data 会在每次加载页面时清空用户的存储。