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, 主机安全, 子域名暴力破解, 安全扫描器, 安全规则引擎, 密码管理, 文档结构分析, 无后门, 自动化检测, 逆向工具