WRG-11/devguard-scan
GitHub: WRG-11/devguard-scan
一款零上传、纯浏览器端运行的机密扫描器,将 Python 密钥检测引擎移植为无依赖的前端静态页面,在本地识别代码中泄露的 API 密钥与 token。
Stars: 0 | Forks: 0
# devguard-in-browser
一款 **100% 客户端** 的机密扫描器。粘贴代码或拖入文件;它能标记出泄露的
API 密钥、token 和私钥块,**不会有一个字节离开你的**
浏览器。它是 `wrg_devguard`
`scan-secrets` 引擎的一个静态、无依赖移植版本——拥有相同的 10 条规则,相同的包含/排除逻辑,
相同的行/列报告。
## 状态
概念验证——引擎的“立即试用”功能演示,而非成熟产品。
## 为什么它很有趣
- **0 字节上传。** 所有扫描均在浏览器的 `scan.js` 中运行。源码中没有任何地方使用
`fetch`、`XMLHttpRequest`、`WebSocket`、`sendBeacon`、分析脚本或外部
CDN。打开 DevTools 的 **Network** 标签页,扫描一个文件,
你会发现在初始页面加载后 **零** 个网络请求。
- **绝不显示机密信息。** 每个匹配项都报告为 `[REDACTED]`;原始的
机密值绝不会出现在结果表格、DOM 或任何 payload 中(与
`secrets.py:107` 保持一致)。
- **检测一致性**,与原生的 Python 工具保持一致,已通过测试工具
(见下文)证明——而不仅仅是视觉上相似。
## 运行说明
它使用 ES modules,因此请通过 http 提供服务(modules 在 `file://` 下会被阻止):
```
# 从 repo root
py -3 -m http.server 8080
# 然后打开 http://localhost:8080/
```
任何静态主机(GitHub Pages、Netlify、S3)的工作方式都是一样的——一个在线
实例运行在 。页面
加载完成后,你可以完全断开网络——它依然能正常工作。
## 检测内容(10 条规则——原样移植)
| rule_id | severity | source |
|-----------------------------|----------|-------------------------|
| `openai_api_key` | ERROR | `secrets.py` SECRET_RULES |
| `github_token` | ERROR | " |
| `aws_access_key_id` | ERROR | " |
| `slack_token` | ERROR | " |
| `private_key_block` | ERROR | " |
| `generic_secret_assignment` | WARNING | " |
| `google_api_key` | ERROR | " |
| `stripe_secret_key` | ERROR | " |
| `github_fine_grained_pat` | ERROR | " |
| `slack_webhook_url` | ERROR | " |
## 一致性与冒烟测试工具
```
# 从 repo root
pwsh -NoProfile -ExecutionPolicy Bypass -File .\scripts\run_parity.ps1
```
JS 引擎 + UI 冒烟测试通过 `run_parity.ps1` 独立运行。该测试工具:
1. 通过 Node 在 `fixtures/` 上运行 **JS** 引擎(`scan.js`)。
2. 在相同的
`fixtures/` 上运行 **原生 Python** `wrg_devguard.secrets.scan_secrets()`。
3. 比较检测结果集及严重性计数(`rule_id`/`file`/`line`/`column`)——
出现任何差异均以非零状态退出。
4. 运行无头 UI 路径冒烟测试,证明浏览器粘合代码渲染检测结果时使用了
`[REDACTED]`,且绝不会显示原始值。
**上次运行:** 在 10 条规则的语料库中,9/9 个检测结果逐字节完全一致,摘要
计数完全相同(6 个 ERROR + 3 个 WARNING);UI 冒烟测试通过 (PASS)。
## Fixtures
`fixtures/` 包含 **纯合成** 内容——每个“机密”都是
虚假/无功能的,其存在仅仅是为了测试这 10 条规则以及
包含/排除/无误报路径。没有提交任何真实的凭证。
## 文件
```
index.html static SPA (inline CSS, no CDN)
app.js UI glue (intake → scan → render); no network APIs
scan.js shared engine — runs in browser AND Node (single source of truth)
package.json type:module (zero runtime deps)
fixtures/ synthetic parity corpus
scripts/ js_reference_dump.mjs · py_reference_dump.py · parity_compare.py
ui_smoke.mjs · run_parity.ps1
```
## 不在范围内 (MVP)
git/repo 克隆 · policy-lint / ai_check / 威胁检查 · 账户 / 后端 /
网络 · Pyodide · 发布/托管。单页面,单功能:secret-scan。
## 第二阶段 (非此 POC)
如果获得关注:将采用基于 Pyodide 的模式,在浏览器中原样运行 `secrets.py`(及其他
零依赖的 WRG 工具)。公开的 GitHub Pages 主机已
上线 ( );Pyodide 模式
将暂时搁置,直到在线演示证明了实际需求。
## License
MIT — 见 [LICENSE](LICENSE)。
## WRG-11 生态系统的一部分
- [mcp-objauthz-lab](https://github.com/WRG-11/mcp-objauthz-lab) — 专为学习 BOLA/IDOR 设计的含漏洞 MCP server
- [wrg-sigma-rules](https://github.com/WRG-11/wrg-sigma-rules) — 68 条 sigma 检测规则 + 3 个 MCP 工具
完整索引 → [github.com/WRG-11](https://github.com/WRG-11)
标签:StruQ, 云安全监控, 多模态安全, 敏感信息扫描, 数据可视化, 本地处理, 浏览器端, 自定义脚本, 逆向工具, 静态分析