exho-rose/apisec-scanner
GitHub: exho-rose/apisec-scanner
一款轻量级 CLI 工具,在应用发布前快速扫描 API 是否存在 OWASP API Top 10 常见配置错误。
Stars: 0 | Forks: 0
# apisec-scanner
一个小巧的 CLI 工具,用于检查 API 是否存在一些常见的 OWASP API Top 10 配置错误——这类问题在人工审查时很容易遗漏,但扫描器只需一秒钟就能发现。
我注意到在多次不同的评估中,总是重复出现同样的一些问题(缺少 HSTS,CORS 反射任意 origin,JWT 没有 expiry,登录 endpoint 没有 rate limiting),因此我开发了这个工具。我希望能在每次发布前将它指向预发环境的 API,而不是只有在完整的渗透测试期间才发现这些问题。
**它不能替代 Burp Suite 或真正的渗透测试。** 它是一个快速的预检步骤——深入检查 6 个特定项目,而不是走马观花地检查 1000 个项目。
## 检查内容
| 检查项 | 捕捉目标 |
|---|---|
| `headers` | 缺失 HSTS / X-Content-Type-Options / CSP,以及指纹特征 headers(`Server`、`X-Powered-By`) |
| `cors` | 带有凭证的通配符 CORS,或者将任意 `Origin` 反射回去的 CORS |
| `jwt_check` | 没有 `exp` claim 的 token,以及服务器是否会接受伪造的 `alg:none` token |
| `rate_limit` | 对登录/OTP 类 endpoint 的大量突发请求是否会被限流 |
| `verbose_errors` | 在请求格式错误时泄露的 stack trace / 框架调试页面 |
| `http_methods` | 是否仍然启用了 `TRACE`/`TRACK` 等遗留方法(跨站跟踪风险) |
## 安装
```
git clone https://github.com/exho-rose/apisec-scanner.git
cd apisec-scanner
pip install -r requirements.txt
```
## 使用说明
```
python -m apisec_scanner https://api.example.com
```
启用带有身份验证感知的检查:
```
python -m apisec_scanner https://api.example.com \
--token "$YOUR_BEARER_TOKEN" \
--auth-test-path /api/v1/profile \
--rate-limit-path /api/v1/login
```
将报告输出为 Markdown(方便粘贴到工单中):
```
python -m apisec_scanner https://api.example.com --markdown-out report.md
```
完整选项:
```
positional arguments:
base_url Base URL of the API, e.g. https://api.example.com
options:
--timeout SECONDS Per-request timeout (default: 8)
--insecure Skip TLS certificate verification
--token TOKEN A valid bearer token, used for JWT alg:none testing
--auth-test-path PATH Path that requires --token, e.g. /api/v1/profile
--rate-limit-path PATH Path to burst-test for missing rate limiting
--rate-limit-requests N Requests to fire for the rate-limit check (default: 20)
--markdown-out FILE Write the report as Markdown to this file
--no-color Disable colored terminal output
```
如果提出了任何 HIGH 严重级别的发现,退出代码为 `1`,否则为 `0`——如果你想将其接入 CI 作为一道软性检查关卡,这会很有用。
## 先在本地试运行
在 `examples/` 目录下有一个故意设置了许多漏洞的小型 Flask 应用,你可以借此查看扫描器的实际发现能力,然后再将其指向任何真实目标:
```
pip install -r requirements-dev.txt
python examples/vulnerable_app.py &
TOKEN=$(curl -s http://127.0.0.1:5000/api/login | python3 -c "import sys,json; print(json.load(sys.stdin)['token'])")
python -m apisec_scanner http://127.0.0.1:5000 \
--auth-test-path /api/profile \
--token "$TOKEN" \
--rate-limit-path /api/login
```
该次运行的确切示例输出位于 [`examples/sample_output.md`](examples/sample_output.md) 中——它正确标记了该应用植入的所有问题:缺少 HSTS,CORS 反射任意 origin,可伪造的 `alg:none` JWT,以及 `/api/login` 缺少 rate limiting。
## 运行测试
```
pip install -r requirements-dev.txt
PYTHONPATH=. pytest tests/ -v
```
## 仅对你被授权的测试目标进行测试
该工具会发送真实请求,包括为了进行 rate limit 检查而发送的大量突发请求。请仅将其指向你拥有或获得明确书面测试许可的 API。请勿对第三方生产系统运行此操作。
## 许可证
MIT — 查看 [LICENSE](LICENSE)。
标签:API安全, GraphQL安全矩阵, JSON输出, LNA, Python, 主机安全, 子域名暴力破解, 安全扫描器, 安全规则引擎, 密码管理, 文档结构分析, 无后门, 自动化检测, 逆向工具