Vega-Starboard/vega-dom-comment-scanner
GitHub: Vega-Starboard/vega-dom-comment-scanner
一款 Tampermonkey 油猴脚本,用于在授权安全测试中扫描已渲染 DOM 内的 HTML 注释、隐藏字段、可疑属性与内部 URL,本地运行并自动脱敏,适合信息泄露审查。
Stars: 0 | Forks: 0
# Vega DOM 注释扫描器
[](https://www.tampermonkey.net/documentation.php)
[](https://www.tampermonkey.net/documentation.php?ext=iikm&q=grant&version=4.16.1)
[](PRIVACY.md)
[](PRIVACY.md)
[](SECURITY.md)
[](LICENSE)
[](scripts/verify_userscript.py)
[](https://github.com/Vega-Starboard/vega-dom-comment-scanner/releases)
[](https://shields.io/)
Vega DOM Comment Scanner 用于在已渲染的 DOM 中查找 HTML 注释、隐藏的表单字段、可疑的
属性名以及内部 URL。它运行在
当前标签页中,显示本地覆盖层,隐去敏感值,并导出
一份用于记录的小型报告。
它不会发起网络请求。它不会读取 cookies。它不会读取
localStorage 或 sessionStorage。它不会捕获凭证。它不会
上传遥测数据。
## 状态
原型版:`0.1.0`
这是一个适用于 Tampermonkey 类管理器、可直接使用的用户脚本。它不是
浏览器扩展包,也不需要构建步骤。
## 仅限合法使用
仅在你拥有的系统、你管理的系统、明确的漏洞赏金范围内、
书面的客户授权范围内或本地实验目标上使用此工具。
本项目专为以下用途设计:
- 授权的应用程序安全审查
- 防御性的已渲染 DOM 检查
- 漏洞赏金报告准备
- 开发者发布前的自查
- 本地实验学习
本项目不适用于未经授权的侦察或漏洞利用。
## 扫描内容
该扫描器会审查当前标签页中已渲染的 DOM:
- 来自 `Document.createTreeWalker(..., NodeFilter.SHOW_COMMENT)` 的 HTML 注释。
- 来自 `document.querySelectorAll('input[type="hidden"]')` 的隐藏输入框。
- 可疑属性名,如 token、secret、api-key、auth、jwt、csrf、
session、debug、internal、admin、endpoint、env、uri、url、redirect 和
callback。
- 内联事件处理程序属性,如 `onclick`。
- 注释和选定属性中包含的类似内部 URL 的字符串。
- 类似端点的相对路径,如 `/api`、`/admin`、`/graphql`、`/auth`、
`/oauth`、`/sso` 以及带版本的 API 路径。
## 不扫描的内容
- 无 cookies。
- 无 localStorage。
- 无 sessionStorage。
- 无 IndexedDB。
- 无浏览器历史记录。
- 无请求体。
- 无响应体。
- 无密码字段值。
- 无跨源 iframe 内容。
- 无后台爬取。
- 无远程页面。
## 隐私边界
该用户脚本被特意声明为:
```
// @grant none
```
Tampermonkey 将 `@grant` 记录为用于白名单 `GM_*`
API 和其他强大功能的元数据字段。此脚本使用 `@grant none`,不请求
GM API,也不包含 Tampermonkey 的网络或存储 API。
该扫描器还避免使用:
- `fetch`
- `XMLHttpRequest`
- `WebSocket`
- `EventSource`
- `navigator.sendBeacon`
- `document.cookie`
- `localStorage`
- `sessionStorage`
- `GM_xmlhttpRequest`
- `GM_setValue`
- `GM_getValue`
## 脱敏模型
隐藏字段和可疑属性的值不会直接原样显示。扫描器
改为记录值的元数据:
- 值长度
- 值形状标签,如 `jwt-like`、`uuid-like`、`url-like`、
`email-like`、`long-value` 或 `internal-looking`
- `` 标记,用于替换原本应出现的原始值
URL 查询值将被替换为 ``。查询参数名称将被保留,
因为它们对端点和报告记录很有用。
## 安装说明
### 从 GitHub Raw 安装
在此仓库发布后,打开:
```
https://raw.githubusercontent.com/Vega-Starboard/vega-dom-comment-scanner/main/vega-dom-comment-scanner.user.js
```
Tampermonkey 应该会提示安装该脚本。
### 手动安装
1. 安装 [Tampermonkey](https://www.tampermonkey.net/)。
2. 打开 Tampermonkey 仪表板。
3. 创建一个新脚本。
4. 用 `vega-dom-comment-scanner.user.js` 替换模板内容。
5. 保存。
6. 访问经过授权的 HTTP 或 HTTPS 页面。
7. 点击右下角的 **Vega DOM** 按钮。
## 使用方法
1. 打开经过授权的目标页面。
2. 点击 **Vega DOM**。
3. 点击 **Scan DOM**。
4. 按文本或发现类型进行过滤。
5. 使用 **Highlight** 在关联元素可用时将其可视化高亮。
6. 使用 **Copy Markdown** 或 **Export JSON** 以便本地记录。
要进行本地冒烟测试,请运行包含的演示页面:
```
cd vibes/apps/dom-comment-scanner
python3 -m http.server 8791
```
然后打开:
```
http://127.0.0.1:8791/demo/test-page.html
```
## 输出格式
JSON 导出示例:
```
{
"version": 1,
"tool": "Vega DOM Comment Scanner",
"scannedAt": "2026-05-09T14:30:00.000Z",
"page": {
"url": "https://example.test/app?view=",
"origin": "https://example.test",
"title": "Example App"
},
"counts": {
"total": 4,
"review": 3,
"comments": 1,
"hiddenFields": 1,
"attributes": 1,
"urls": 1
},
"findings": {
"comments": [
{
"kind": "comments",
"severity": "review",
"title": "HTML comment",
"selector": "html > head",
"value": "TODO internal staging endpoint https://staging.internal.example.test/api/users?token=demo",
"details": {
"length": 88,
"shape": ["internal-looking"]
}
}
]
}
}
```
## 验证
运行本地验证器:
```
cd vibes/apps/dom-comment-scanner
npm run verify
```
验证器会检查:
- 用户脚本元数据块
- `@grant none`
- 预期的 `@match` 和 `@run-at`
- 无网络 API
- 无 cookie 访问
- 无 localStorage/sessionStorage 访问
- 无 Tampermonkey GM 网络/存储 API
- 注释、隐藏字段、可疑属性和 URL 扫描逻辑是否存在
- README 安全标记
同时运行语法检查:
```
node --check vega-dom-comment-scanner.user.js
```
## 项目结构
```
.
├── vega-dom-comment-scanner.user.js
├── demo/
│ └── test-page.html
├── scripts/
│ └── verify_userscript.py
├── PRIVACY.md
├── SECURITY.md
├── CONTRIBUTING.md
├── LICENSE
└── package.json
```
## 设计选择
### 采用用户脚本而非扩展
此工具不需要扩展级别的网络或主机权限。用户脚本
已足够,因为任务只是在当前页面上进行已渲染 DOM 检查。
### 不显示原始隐藏值
隐藏字段通常包含 CSRF token、重定向目标、对象 ID 或其他
上下文值。扫描器报告字段名、ID、值长度和形状
标签,而不是原始值。
### 仅限已渲染 DOM
扫描器只能看到浏览器当前渲染的内容。它不会抓取源
HTML、抓取链接、拦截请求或检查服务器响应。
## 局限性
- 动态单页应用在路由更改后可能需要重新扫描。
- 封闭的 shadow root 无法检查。
- 跨源 iframe 内容无法检查。
- 当页面使用不寻常的 ID 或类名时,生成的选择器可能无法高亮每一个元素。
- 在构建/压缩过程中被剥离的注释将不会出现。
- 扫描结果仅为审查线索,并非漏洞声明。
## 路线图
- 可选的 shadow DOM 开放根扫描。
- 改进针对注释和隐藏字段的分组导出。
- 针对每类发现进行严重性调整。
- 导入到未来的 Vega 证据仪表板。
- 如果用户脚本的限制成为实际问题,提供可选的 Firefox/Chrome 扩展包装器。
## 遵循的官方文档
- [Tampermonkey 文档](https://www.tampermonkey.net/documentation.php)
- [Tampermonkey `@grant`](https://www.tampermonkey.net/documentation.php?ext=iikm&q=grant&version=4.16.1)
- [MDN: Document.createTreeWalker](https://developer.mozilla.org/en-US/docs/Web/API/Document/createTreeWalker)
- [MDN: Document.querySelectorAll](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll)
- [MDN: ``](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input/hidden)
- 用于 README 徽章的 [shields.io](https://shields.io/)
## 关键词
`tampermonkey`、`userscript`、`dom-scanner`、`html-comments`、`hidden-fields`、
`attribute-scanning`、`internal-urls`、`rendered-dom`、`security-testing`、
`authorized-testing`、`bug-bounty`、`defensive-security`、`appsec`、
`privacy-tool`、`local-only`、`no-telemetry`、`no-network`
## GitHub Topics
建议的仓库主题:
```
tampermonkey
userscript
dom-scanner
html-comments
hidden-fields
attribute-scanning
internal-urls
security-testing
bug-bounty
defensive-security
privacy-tool
local-only
no-telemetry
appsec
```
## 许可证
MIT。参见 [LICENSE](LICENSE)。
标签:CMS安全, DOM审查, DOM扫描, HTML注释扫描, JavaScript, MIT许可, Tampermonkey, Web安全, XSS检测辅助, 前端安全, 安全测试, 客户端安全, 攻击性安全, 敏感信息发现, 数据可视化, 数据泄露, 数据脱敏, 本地渲染, 油猴脚本, 浏览器脚本, 漏洞赏金工具, 策略控制器, 网络安全, 自定义脚本, 蓝队分析, 逆向工具, 隐私保护, 隐藏表单字段, 零网络请求