wdmatrix404-cyber/xhrscan

GitHub: wdmatrix404-cyber/xhrscan

基于 Playwright 的通用 Web 应用 XHR/API 发现工具,通过主动遍历已登录应用来枚举其后端接口调用。

Stars: 0 | Forks: 0

# xhrscan 🌐 **English** | [日本語](README.ja.md) | [中文](README.zh.md) 一个通用的、不针对特定站点的扫描器,它会在已登录的 Web 应用中进行点击遍历, 并报告其发出的每一个 XHR/fetch/document 请求 —— 无需源代码, 无需现有的 API 文档,也无需进行特定站点的配置。 **提供两种运行方式,底层引擎相同:** 作为简单且确定性的 CLI 运行 (`xhrscan scan`,不使用 LLM,不需要 API key —— 可直接在脚本或 CI 任务中运行, 无需安装任何其他组件),或者由你已有的 coding agent (如 Claude Code/Codex)驱动,进行自适应修复阶段(repair waves),它能读取屏幕上的文本并 判断何时停止,而不是盲目运行固定的遍历次数。请参阅快速入门。 ## 核心亮点 - **主动而非被动** —— 它会亲自点击并遍历整个应用, 包括那些手动侦察通常会跳过的删除/重置/完成类操作。 - **针对目标零配置** —— 不需要选择器,不需要编写应用专属脚本;将其 指向任何已通过身份验证的应用即可。 - **安全地体验完整的 CRUD 生命周期** —— 创建真实的测试实体, 执行它们完整的生命周期,并精确清理它所创建的一切。 - **可直接用于报告的输出** —— 经过去重和来源标记的 XHR 模板, 而不是原始的 HAR 转储。 - **拒绝虚假的安全感** —— 会直白地说明它将触碰哪些数据;至于 将其指向何处,由你决定。 ## 功能说明 将其指向 Web 应用的主页,它会: 1. **发现** 从主页(导航链接、菜单、选项卡)中发现应用的各个功能区域 —— 无需硬编码的选择器或特定站点的知识。 2. **探索** 以通用方式探索每个区域:点击按钮/链接,使用 合理的测试数据填写表单,处理确认对话框和模态框(包括 像 SweetAlert2 这样的第三方组件),并捕获其触发的每一个 XHR/fetch/document 请求。 3. **去重** 将所有内容去重,整理成一份清晰的 **XHR 模板** 列表(方法 + 规范化后的 URL + 状态),并附带完整的来源信息 —— 即哪个 UI 路径 触发了它、发送了什么内容、以及返回了什么结果。 4. **报告** 将所有内容汇总为单个 CSV 文件。 每一个底层决策(什么算作表单字段、什么算作模态框、 什么算作破坏性操作)都是基于结构/DOM 信号做出的 —— 其探索 引擎本身并不使用 LLM,也不需要 API key。 ## 适用人群 适合任何需要知道 **Web 应用实际调用了哪些后端 API**, 但又不想阅读其前端源代码的人: - **逆向工程无文档的 API**,以便在在此基础上构建集成之前进行了解。 - **安全测试/攻击面映射**,用于在已授权评估的侦察阶段 —— 这是一种快速、通用的方法,用于枚举整个应用中真实的 endpoint、方法以及请求/响应的数据结构。 - **API 文档补全**,为那些从未有过文档的遗留应用生成文档。 - **回归基准**,在重构或迁移前:捕获当前应用自身的 API 表面 长什么样,并在迁移后进行对比。 - **QA/测试工程师**,希望获取某个特定功能所涉及的具体 endpoint 列表, 以便在此基础上构建测试覆盖率。 你需要像本工具那样对目标进行测试一样,获得相应的授权 —— 请参阅下文的安全须知。 ## ⚠️ 安全须知 —— 仅限测试账户和环境 **每次扫描都可能修改或删除目标上的真实数据,包括在扫描 之前已经存在的已有数据 —— 没有任何标志可以关闭此行为。** 它会像点击任何其他按钮一样,点击任何匹配此关键词启发式规则(元素的 名称、`onclick`、CSS 类或 i18n key)的内容:**delete, remove, archive, deactivate, disable, terminate, destroy, revoke, drop, purge, unsubscribe, suspend, reset, ban, complete, cancel**。 该启发式算法并不理解特定按钮实际执行的操作,因此请将任何 匹配的操作视为可能是不可逆的。 **真正的安全边界在于你将此工具指向何处,而不是某个标志。** 请仅在完全由你控制、并且被明确授权进行破坏性测试的一次性测试账户/环境中运行它。每次运行时,它都会在你提供的任何 URL 上创建、 编辑和删除真实数据。 请勿针对生产账户、共享账户或任何你无法承受数据丢失后果的环境运行此工具。 它也不是一款隐秘工具 —— 它不会试图规避速率限制、CAPTCHA 或机器人检测, 它也不打算这样做。 **自创建的实体总是会被清理。** 在探索过程中,此工具会 创建虚拟测试数据(如“新分组”、“新模板”等),并在每个区域都有机会引用它们后,删除本次运行中*由其自身创建*的特定实体 —— 它只会对刚刚从成功的创建请求中返回的 id 执行操作,绝不进行猜测。检查 `report` 运行摘要中的 `selfCreatedEntitiesCleanedUp` 计数(以及 `dossier-finalizer.json`)以查看它触碰了哪些内容 —— 而不是 `cleanupActions`, 后者计算的是另一回事,范围更窄(针对本次运行之前*已经存在*的实体执行的破坏性操作)。 **独立的 `` 写入值),但如果是完全没有底层 `