Checking HTTP Security Headers 是一个用于审计目标 Web 应用 HTTP 响应安全头的技能。HTTP 响应头是大多数 Web 应用最容易部署的纵深防御层:每个头针对特定攻击类别,HSTS 强制 HTTPS、CSP 阻断脚本注入、X-Frame-Options 阻止点击劫持等。缺失这些头不会导致应用崩溃,但会让相应攻击类别保持敞开。本技能探测规范的安全相关头部是否存在、取值是否正确。
【主要能力】 脚本会按严重级别报告发现项,包括:
- HSTS 头缺失(HIGH,OWASP A05:2021)
- HSTS max-age 低于预加载阈值 31536000 秒即一年(MEDIUM)
- 存在 preload 指令但缺少 includeSubDomains(LOW)
- CSP 头缺失(HIGH,OWASP A03:2021)
- CSP 允许 unsafe-inline,即 script-src 或 style-src 包含该值(MEDIUM)
- CSP 允许 unsafe-eval(MEDIUM)
- CSP 的 frame-ancestors 与 X-Frame-Options 同时缺失,点击劫持敞开(HIGH,CWE-1021)
- X-Content-Type-Options:nosniff 缺失,MIME 嗅探攻击敞开(MEDIUM,OWASP A05:2021)
- Referrer-Policy 缺失或为 unsafe-url,跨域 URL 泄漏(MEDIUM)
- Permissions-Policy 缺失,摄像头/麦克风/地理位置权限未受限(LOW)
- Server 头泄露版本,如 nginx/1.18.0 可被指纹识别(LOW,CWE-200)
- 认证响应上出现 Cache-Control public,共享缓存可能把用户 A 的响应发给用户 B(HIGH,CWE-525)
【使用方式】 前提要求 Python 3.9+,对非本地目标需要授权。 第一步确认授权,需要用户确认有权对目标进行头部测试。 第二步运行扫描器,命令示例: python3 ${CLAUDE_PLUGIN_ROOT}/skills/checking-http-security-headers/scripts/check_headers.py https://example.com --authorized 可用选项:
- --authorized 确认授权(对非本地目标必需)
- --output FILE
- --format FMT 支持 json | jsonl | markdown,默认 markdown
- --min-severity SEV 默认 info
- --timeout SECS 每个探测的超时,默认 10
- --authenticated 视为认证端点,采用更严格的 Cache-Control 门槛
第三步解读发现:HIGH 表示敞开的可利用类别,如无 HSTS 意味着中间人降级敞开,无 CSP 意味着 XSS 类别完全敞开,无点击劫持防护意味着 UI 重定向攻击;MEDIUM/LOW 表示配置加固项。 第四步跨技能衔接:本技能之后建议接着审计 CORS 策略,因为 CSP 与 CORS 会相互影响,某些 CSP 指令需要匹配的 CORS 头。
【适用场景示例】
- 提升 Mozilla Observatory 评级:用户反馈评级为 D,运行脚本后生成按严重级别分组的 Markdown 报告,将每个发现映射到 PLAYBOOK.md 中对应服务器类型的配置片段,处理完所有 HIGH 发现后评级通常从 D 提升到 B。
- HSTS 预加载资格预检:用户想提交到 hstspreload.org,运行脚本并设置 --min-severity low,关注 HSTS max-age 低于预加载阈值和缺少 includeSubDomains 两项,二者必须清除后才能提交,否则会被拒绝。
- 认证端点 Cache-Control 排查:用户曾在上一季度出现认证响应被公开缓存的缺陷,需审计 /api/* 确认已修复,使用 --authenticated 标志会把 Cache-Control 姿态从 MEDIUM 提升为 HIGH,并增加对认证内容禁止出现的 Cache-Control: public 的检查。
【输出与错误处理】 输出支持 JSON、JSONL、Markdown,退出码 0/1/2 依据 lib/report.py 定义。错误处理:无 HTML 响应时给出 INFO 发现,提示头部可能不适用(JSON API 只使用头部子集);重定向到登录页时跟随一次并审计目标页;连接错误时退出码 2。
【限制】 资料未提供该技能的具体收费模式、价格、支持的平台范围或额外的效果承诺,这些信息暂未提供。