Vega-Starboard/vega-endpoint-collector
GitHub: Vega-Starboard/vega-endpoint-collector
一款仅限本地的Firefox扩展,用于从当前浏览页面中安全地收集、脱敏并导出URL端点清单,辅助安全审查与资产盘点。
Stars: 0 | Forks: 0
# Vega Endpoint 收集器
[](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions)
[](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json)
[](PRIVACY.md)
[](PRIVACY.md)
[](LICENSE)
[](scripts/verify_extension.py)
[](https://github.com/Vega-Starboard/vega-endpoint-collector/releases)
Vega Endpoint Collector 帮助安全测试人员、漏洞赏金猎人、开发者和防御者快速将当前打开的页面转换为一份紧凑的端点清单。它从可见的页面结构和浏览器资源计时元数据中收集 URL,对查询值进行脱敏处理,对端点进行去重,并导出一个本地 JSON 制品。
它有意不被设计为代理、爬虫、模糊器、扫描器、漏洞利用工具或请求重放器。
## 状态
原型版本:`0.1.0`
首个发布版本是一个用于本地开发和审查的未打包 Firefox 扩展。GitHub 发布版本附带一个开发压缩包。它尚未在 Mozilla 附加组件商店上架。
## 仅供合法使用
仅可在您拥有的系统、您管理的系统、明确的漏洞赏金范围、书面授权的客户范围或本地实验室目标上使用此工具。
此项目设计用于:
- 经授权的应用程序安全测试
- 防御性端点清单编制
- 漏洞赏金笔记准备
- 本地实验室学习
- 发布前开发者自查
此项目不设计用于未授权侦察或自动化探测第三方系统。
## 收集内容
收集仅在用户点击扩展弹出窗口中的 **收集当前标签页** 按钮后发生。
收集器记录:
- 来自 `a[href]`、`area[href]` 和 `link[href]` 的链接
- 表单操作 URL、表单方法和表单字段名称
- 脚本、图片、框架、媒体、嵌入、对象和源 URL
- `srcset` 图片候选源
- 内联 CSS `url(...)` 和 `@import` 引用
- 来自选定 `meta[content]` 值的元数据 URL
- 浏览器暴露的 `PerformanceResourceTiming` 元数据
- 同源与跨源分类
- 查询参数名称(查询值已被脱敏)
最新的捕获结果存储在 Firefox 扩展存储中,因此关闭弹出窗口后重新打开不会丢失当前地图。
## 不收集内容
- 不收集请求体。
- 不收集响应体。
- 不收集 Cookie 值。
- 不收集凭证值。
- 不收集浏览器历史记录。
- 不收集按键记录。
- 不收集 localStorage 或 sessionStorage 值。
- 不收集非活动标签页的数据。
- 不进行后台爬取。
- 不进行远程上传。
- 不进行遥测。
- 不修改请求。
## 存在意义
大多数安全工作流程最终都需要一份干净的已观测路由、资产、表单和类似 API 的 URL 列表。浏览器开发者工具可以显示这些,但其输出分散在元素、网络、源代码和手动笔记中。
Vega Endpoint Collector 做出一个明确的承诺:
1. 向活动标签页询问哪些端点类 URL 是可见的。
2. 对有风险的 URL 值进行脱敏。
3. 对结果进行去重。
4. 保持本地化。
5. 为笔记和报告导出有用的制品。
## 功能特性
- **点击即收集**:无持久内容脚本,无持续收集。
- **仅限活动标签页**:使用 `activeTab` 配合 `scripting` 权限,而非广泛的主机权限。
- **端点去重**:跨 DOM、表单、CSS 和计时来源对重复 URL 进行分组。
- **查询值脱敏**:保留查询键名,但用 `` 替换值。
- **来源分组**:标记同源和跨源端点。
- **本地持久化**:将最新的捕获结果保存在 `browser.storage.local` 中。
- **JSON 导出**:从弹出窗口下载结构化证据文件。
- **URL 复制**:将脱敏后的端点列表复制到剪贴板。
- **无依赖运行时**:纯 HTML、CSS 和 JavaScript。
## 权限
该扩展遵循 Mozilla 的 WebExtension 权限模型,并保持权限集合最小化。
| 权限 | 用途 | 范围 |
| --- | --- | --- |
| `activeTab` | 在用户操作后授予对当前标签页的临时访问权限。 | 仅当前活动标签页。 |
| `scripting` | 按需注入收集器脚本。 | 从弹出窗口一次性执行。 |
| `storage` | 本地保存最新的捕获结果。 | 仅 Firefox 扩展存储。 |
有意不请求的权限:
- ``
- `cookies`
- `downloads`
- `history`
- `tabs`
- `webRequest`
- `webRequestBlocking`
清单文件还声明 Firefox 的 `data_collection_permissions.required` 为 `["none"]`。该扩展不会将收集到的数据传输到本地浏览器之外。
## 安装
### 临时 Firefox 安装
1. 打开 Firefox。
2. 访问 `about:debugging`。
3. 选择 **此 Firefox**。
4. 选择 **加载临时附加组件**。
5. 从此文件夹中选择 `manifest.json`。
Firefox 会保留临时扩展,直到浏览器重启。
### 使用 web-ext 进行开发
Mozilla 官方的 `web-ext` 工作流可以检查和运行该扩展:
```
cd vibes/apps/endpoint-collector
npm run lint
npm run start
```
脚本使用 `npx --yes web-ext ...`,因此不需要提交依赖文件夹。
## 使用方法
1. 导航到已授权的目标页面。
2. 点击 Vega Endpoint Collector 工具栏图标。
3. 点击 **收集当前标签页**。
4. 查看端点列表和来源标签。
5. 使用过滤框缩小列表范围。
6. 点击 **复制 URL** 以复制当前可见的端点,或点击 **导出 JSON** 以保存完整的捕获结果。
进行本地冒烟测试,可临时加载该扩展并从 Seedboard 收集端点:
```
http://127.0.0.1:8787/
```
冒烟测试仅限本地,收集流程在浏览器内完成。
## 输出格式
示例导出:
```
{
"version": 1,
"collectedAt": "2026-05-08T20:30:00.000Z",
"page": {
"url": "https://example.test/app?view=",
"origin": "https://example.test",
"host": "example.test",
"title": "Example App"
},
"counts": {
"endpoints": 3,
"sameOrigin": 2,
"crossOrigin": 1
},
"endpoints": [
{
"url": "https://example.test/api/users?page=",
"origin": "https://example.test",
"host": "example.test",
"path": "/api/users",
"queryKeys": ["page"],
"sameOrigin": true,
"sources": ["performance"],
"kinds": ["fetch"],
"methods": [],
"count": 1,
"details": [
{
"initiatorType": "fetch",
"durationMs": 42,
"transferSize": 2048,
"nextHopProtocol": "h2"
}
]
}
],
"warnings": []
}
```
## 安全与隐私模型
Vega Endpoint Collector 围绕一个狭窄的收集面构建:
- 用户操作是收集的触发条件。
- 活动标签页是访问的边界。
- URL 查询值在存储前被脱敏。
- 收集到的数据存储在 Firefox 扩展存储中,除非被导出。
- 运行时代码不包含 `fetch`、`XMLHttpRequest` 或 `sendBeacon` 调用。
- 运行时代码不访问 `document.cookie`。
- 运行时代码不读取目标页面的 Web 存储值。
完整政策请参见 [PRIVACY.md](PRIVACY.md) 和 [SECURITY.md](SECURITY.md)。
## 验证
运行本地静态验证器:
```
cd vibes/apps/endpoint-collector
npm run verify
```
验证器检查:
- 清单 JSON 有效性
- 预期的最小权限集
- 不存在被禁止的权限
- Firefox 无数据收集声明
- 引用的图标和弹出窗口文件
- 运行时脚本中无网络 API 调用
- 运行时脚本中无 Cookie 访问
- 无页面 Web 存储值读取
- README 中的安全/隐私标记
当 `web-ext` 可用时,也应运行:
```
npm run lint
```
Mozilla 建议在运行或提交扩展前使用 `web-ext lint`。
## 项目布局
```
.
├── manifest.json
├── src/
│ ├── collector.js
│ ├── popup.css
│ ├── popup.html
│ └── popup.js
├── icons/
│ ├── endpoint-48.svg
│ └── endpoint-96.svg
├── scripts/
│ └── verify_extension.py
├── PRIVACY.md
├── SECURITY.md
├── CONTRIBUTING.md
├── LICENSE
└── package.json
```
## 设计选择
### 最小可行产品中不使用 webRequest
`webRequest` 功能强大,但它会扩展权限范围,并可能使一个小型端点映射器趋向代理类行为。最小可行产品依赖于活动标签页 DOM 检查和浏览器 Performance API 元数据。
未来版本可能会在范围保护、脱敏模型和权限解释更完善后,添加可选的网络观察功能。
### 不使用广泛的主机权限
Mozilla 将 `activeTab` 记录为一种让扩展在明确的用户交互后操作当前页面,而无需请求广泛主机访问权限的方式。这符合产品边界:仅在需要时收集。
### 默认对 URL 进行脱敏
端点映射通常需要路径和参数名,而非实时的秘密值。查询值在显示、存储或导出前用 `` 替换。
## 路线图
- CSV 导出。
- 用于报告笔记的 Markdown 导出。
- 可选的范围允许列表集成。
- 每个主机的捕获历史记录,支持手动删除。
- 权限模型审查后的头部信息集成。
- Chrome MV3 兼容性调整。
- AMO 包元数据和审查准备。
## 参考的官方文档
- [MDN: 浏览器扩展](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions)
- [MDN: manifest.json](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json)
- [MDN: 权限与 activeTab](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions)
- [MDN: scripting API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting)
- [MDN: storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)
- [Firefox 扩展工作坊: web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/)
- [Firefox 扩展工作坊: 数据收集同意](https://extensionworkshop.com/documentation/develop/firefox-builtin-data-consent/)
- [shields.io](https://shields.io/) 用于 README 徽章
## 关键词
`firefox-extension`, `webextension`, `manifest-v3`, `endpoint-discovery`,
`endpoint-mapping`, `security-testing`, `authorized-testing`, `bug-bounty`,
`defensive-security`, `appsec`, `privacy-tool`, `local-only`, `no-telemetry`,
`activeTab`, `scripting-api`, `performance-timing`, `recon-notes`
## GitHub 主题
建议的仓库主题:
```
firefox-extension
webextension
manifest-v3
security-testing
endpoint-discovery
bug-bounty
defensive-security
privacy-tool
local-only
no-telemetry
appsec
```
## 许可证
MIT。详见 [LICENSE](LICENSE)。
标签:Bug Bounty工具, Firefox扩展, JSON导出, Manifest V3, WebExtension, Web安全, 原型工具, 去重, 多模态安全, 安全测试, 授权测试, 攻击性安全, 数据可视化, 无遥测, 本地存储, 本地工具, 本地开发, 查询值编辑, 浏览器元数据, 浏览器扩展, 端点收集, 端点清单, 自定义脚本, 蓝队分析, 逆向工具, 防御性安全