antwnakys/header-check
GitHub: antwnakys/header-check
一款纯 Python 标准库实现的 HTTP 安全响应头分析与评分工具,检测并报告站点缺失或不当的安全头配置。
Stars: 0 | Forks: 0
# 🛡️ header-check
   
一款 **HTTP security-headers 分析器**。它会获取网站的响应头,
评估网站的自我防御能力(抵御 XSS、clickjacking、协议降级、MIME sniffing 等),并明确告诉你需要修复的内容 —— 最终给出一个从 **A 到 F** 的字母评分。
```
Security headers report — https://example.com
HTTP 200
--------------------------------------------------------
✗ Strict-Transport-Security
Not set — the browser may be downgraded to HTTP.
→ Add: Strict-Transport-Security: max-age=31536000; includeSubDomains
✗ Content-Security-Policy
Not set — no policy limiting where scripts/resources can load from.
→ Define a policy, e.g. default-src 'self'; object-src 'none'.
✓ X-Content-Type-Options
Set to nosniff.
--------------------------------------------------------
Grade: D (35/90 points, 39%)
```
## 为什么 HTTP security headers 至关重要
Web 服务器可以指示浏览器执行重要的保护措施 —— 但前提是它必须*发送正确的 headers*。缺少这些 headers 是最常见(也是最容易修复)的 Web 漏洞之一。此工具会检查其中最重要的几项:
| Header | 防御目标 |
| --- | --- |
| **Content-Security-Policy** | 跨站脚本攻击 (XSS) —— 最严重的一项 |
| **Strict-Transport-Security** | 协议降级 / SSL 剥离 |
| **X-Frame-Options** / CSP `frame-ancestors` | Clickjacking |
| **X-Content-Type-Options** | MIME-type sniffing 攻击 |
| **Referrer-Policy** | 向第三方泄露 URL |
| **Permissions-Policy** | 滥用摄像头、麦克风、地理位置等 |
它还会标记 **信息泄露** —— 例如 `Server` 或 `X-Powered-By` header 暴露了确切的软件版本,从而为攻击者提供了指纹。
每一项检查都有评分;总分会映射到一个等级,方便你随时追踪改进情况。
## 用法
```
# 分析网站(如果省略,则默认为 https://):
python -m headercheck example.com
# 完整 URL 和较短的超时时间:
python -m headercheck https://mysite.com --timeout 5
```
当评级为 **D 或 F 时,该工具会以非零状态退出**,因此你可以将其接入 CI 中,一旦部署导致 security headers 倒退,就会让构建失败:
```
python -m headercheck https://staging.mysite.com || echo "Headers regressed!"
```
## 构建方式
三个清晰的分层让逻辑易于测试和扩展:
- **`checks.py`** —— 每个 header 对应一个函数,每个函数都阐明了*该 header 为何重要*以及*如何评估其值*(强 / 弱 / 缺失)。
- **`analyze.py`** —— 获取 headers(已隔离,以便在离线状态下测试评分)并运行所有检查,然后计算分数和评级。
- **`cli.py`** —— 命令行界面和彩色报告。
添加新的 header 检查只需在 `checks.py` 中添加一个新函数,并在 `evaluate()` 中添加一行代码即可。
## 无外部依赖
该分析器仅使用 Python 标准库 (`urllib`)。仅在运行测试时才需要 `pytest`。
## 运行测试
```
pip install pytest
pytest
```
测试套件**完全离线运行** —— 每一项检查和评分逻辑都是针对 header 字典进行测试的,不会发起真实的网络请求。
## 项目结构
```
header-check/
├── headercheck/
│ ├── checks.py # per-header evaluation + scoring
│ ├── analyze.py # fetch headers, run checks, compute grade
│ └── cli.py # command-line interface + report
└── tests/ # pytest suite (network-free)
```
## 注意事项
- 仅对单个响应的 headers 进行评级;它不会爬取整个网站。
- 评分机制带有一定主观性但完全透明 —— 你可以在 `checks.py` 中调整分值,以符合你自己的策略。
- 请仅分析你拥有或已获授权测试的站点。
## 许可证
[MIT](LICENSE) — 可免费使用、学习并在此基础上进行构建。
标签:HTTP安全头分析, LNA, Python, Web安全, 安全规则引擎, 无后门, 蓝队分析, 逆向工具