Ibby111GT/webrecon

GitHub: Ibby111GT/webrecon

一款基于纯 Python 标准库的 Web 安全配置扫描器,通过非侵入式侦察方式检查 HTTP 安全头、Cookie 标志和 TLS 证书状态并生成修复建议报告。

Stars: 0 | Forks: 0

# WebRecon — Web 安全配置扫描器 WebRecon 会读取网站已经向每位访客发布的安全配置——包括其 HTTP 响应头、cookie 标志和 TLS 证书——并报告其中缺失、薄弱或即将过期的内容。每一项发现都包含了生成该发现的证据、其重要性以及一项具体的修复建议。 它是一款**侦察**工具,而不是漏洞利用工具。它只检查网站对外提供的内容,绝不向目标发送任何攻击 payload。它基于 Python 标准库构建,没有任何外部依赖。 ## 快速开始 ``` # 查看在无目标和无网络访问情况下的运行效果 python web_scanner.py --demo # 检查您已授权测试的站点 python web_scanner.py --target https://example.com # 仅运行一类检查 python web_scanner.py --target https://example.com --checks headers # 编写 JSON 报告 python web_scanner.py --target https://example.com --output report.json # 打印 JSON 到 stdout 而不是文本 python web_scanner.py --target https://example.com --json # 扫描目标列表,每行一个 URL python web_scanner.py --file targets.txt --output report.json ``` 添加 `--verbose` 以在文本输出中包含信息性发现。 ## 检查项目 | 类别 | 具体功能 | 默认开启 | |--------|----------------------|---------| | `headers` | 检查六个安全响应头是否存在,加上对弱配置值的分析(较短的 HSTS `max-age`、带有 `unsafe-inline` 或通配符源的 CSP、非 `nosniff` 的 `X-Content-Type-Options`、无法识别的 `X-Frame-Options`)。同时审查 `Set-Cookie` 标志(Secure、HttpOnly、SameSite),标记会泄露版本信息的响应头,并检查明文 HTTP 是否会重定向到 HTTPS。 | 是 | | `tls` | 连接并检查提供的证书:颁发者、使用者、SANs、剩余天数到期信息、协商的协议和密码套件。标记已过期和即将过期的证书、验证失败以及低于 TLS 1.2 的协议版本。 | 是 | | `active` | 请求少量众所周知的路径(`/robots.txt`、`/security.txt`、`/sitemap.xml`)以及绝对不应公开的文件(`/.env`、`/.git/HEAD`、`/.htaccess`、`/server-status`)。普通的 GET 请求,有速率限制,无 payload。 | **否** — 使用 `--checks active` 自行开启 | `active` 默认被排除在运行项之外,因为它会发送目标未请求的请求。仅在你被授权测试的系统上启用它。 ### 检查的 Headers `Strict-Transport-Security`、`Content-Security-Policy`、 `X-Content-Type-Options`、`X-Frame-Options`、`Referrer-Policy`、 `Permissions-Policy`。 ### WebRecon *不* 做的事情 早期版本的 README 宣称支持反射型 XSS 模糊测试、SQL 注入检测以及 OWASP Top 10 分类。这些功能均未实现,并且已被移除而不是弄虚作假。WebRecon 不执行任何注入测试,不发送任何 payload,也不尝试利用任何漏洞。如果你需要这些功能,请在合适的授权下使用专门的扫描工具。 ## 工作原理(简述) **此处的“侦察”是什么意思。** 每个网站在提供页面本身的同付,都会向你的浏览器发布一组指令。这些指令会说明诸如“只能通过安全方式连接到我”、“不要让其他网站嵌入我的页面”以及“不要允许来自其他任何地方的脚本运行”等内容。它们是公开的——你的浏览器在每次访问时都会读取它们。WebRecon 读取相同的指令,并告诉你哪些缺失或书写不当。 **为什么这与攻击网站不同。** 检查商店是否锁了前门并不等同于闯入商店。WebRecon 只查看网站自愿向每个访客公开的内容。它绝不尝试登录、提交数据或触发 bug。唯一一类稍微深入一点的检查——询问是否存在少数众所周知的文件——除非你明确将其打开,否则它都是关闭的。 **试一试。** 运行 `python web_scanner.py --demo`。它会重放一个内置的合成响应,因此无需网络连接和目标即可工作,并且始终产生相同的结果。它特意包含了一些真实场景中的问题。 **解读输出。** 每一项发现都包含严重程度、生成该发现的证据、“原因(why)”行和“修复(fix)”行: - **CRITICAL** — 需立即修复。过期的证书或暴露的、充满密码的 `.env` 文件。 - **HIGH** — 本周内修复。即将过期的证书、过时的加密协议、仍在提供明文未加密 HTTP 的网站。 - **MEDIUM** — 需要排期处理的真正缺陷。缺失的点击劫持防护、可被 JavaScript 读取的会话 cookie。 - **LOW** — 安全强化。泄露隐私的引荐来源设置、保持打开状态的权限。 - **INFO** — 背景信息,而非问题。确认某项配置正确,或记录服务器宣告的软件信息。 目标旁边的标题严重程度仅仅是针对最严重的可操作发现。 **先修复什么。** 任何 CRITICAL 问题,然后是任何与加密相关的问题(证书和协议版本),接着是会话 cookie 上的 cookie 标志,最后是缺失的响应头。大多数修复只需在 Web 服务器配置中更改一行即可实现——投入极小,价值极高,这正是值得进行检查的原因所在。 ## 测试 ``` python -m unittest discover -s tests -v ``` 30 个测试,全部离线完成——这些检查将它们的判断逻辑保留在纯 `analyse*` 函数中,因此测试套件永远不会发起网络连接。 ## 环境要求 - Python 3.10+ - 无外部依赖(纯标准库) ## 道德规范 仅检查你拥有或拥有**明确的书面授权**进行测试的 Web 应用程序。未经授权的扫描可能会违反 CFAA(计算机欺诈和滥用法)、Computer Misuse Act(计算机滥用法)、GDPR 或其他适用法律。特别是 `active` 检查类别,绝对不应指向你无法控制的基础设施。
标签:GraphQL安全矩阵, Python标准库, TLS证书, Web安全, 主机安全, 安全合规, 安全扫描器, 实时处理, 密码管理, 网络代理, 蓝队分析, 逆向工具