hasif5/api-key-exposure-auditor
GitHub: hasif5/api-key-exposure-auditor
一款 Chrome/Edge 浏览器扩展,用于在授权安全研究中被动检测网页暴露的 API 密钥并主动审计其访问限制与计费风险。
Stars: 0 | Forks: 0
# API Key Exposure Auditor
一款 Chrome / Microsoft Edge (Manifest V3) 浏览器扩展,用于检测暴露的
**API keys** — **Google** (`AIza…`)、**OpenAI** (`sk-…`) 以及 **Anthropic**
(`sk-ant-…`) — 检测范围涵盖您访问的页面(渲染后的 DOM、web storage、已加载的
JavaScript bundles 以及网络流量),并按需对每个 key 进行**审计**,以
确定其访问范围、限制情况以及是否会产生
计费。Google keys 会在 Maps/Places/Cloud/AI 范围内进行测试;OpenAI 和 Anthropic
的 keys 会针对其 API 进行验证 —— 并且由于它们是不带任何限制机制的 bearer tokens,任何有效的 key 在无条件情况下都是**极其严重的** (critical)。
专为**学术及授权的安全研究**而构建:用于发现在公开页面源代码中暴露的 keys,以便评估并报告其限制策略(HTTP-referrer /
IP / API 启用情况)。
## 功能
- **多服务商检测** — Google `AIza…`、OpenAI `sk-…` / `sk-proj-…`、Anthropic `sk-ant-…`、OpenRouter `sk-or-…`、xAI `xai-…` 以及 **Twilio** (`AC…` Account SID + Auth Token) keys,每个 key 都带有服务商标签。Bearer-token keys 会针对各服务商的 API 进行验证;Twilio 的 SID+token 对会通过 Basic Auth 验证 — 有效的凭证在无条件情况下都是**极其严重的** (critical)。
- **覆盖所有可能隐藏 key 的界面的深度被动检测**:
- 渲染后的 DOM / 内联脚本 / 元素属性,**以及 open shadow-DOM** 标记
- **所有链接的资源** — 获取并扫描 JavaScript bundles、**CSS**、JSON/config、preloads 以及 web-app manifests
- **Source maps** — 跟踪 `//# sourceMappingURL` 文件并扫描**原始、未压缩的源代码**(压缩后隐藏的 keys 会在此处重新出现)
- **递归资源图抓取** — 跟踪引用的 chunks/JSON/CSS,深度可达 3 层(有界,同源),触及应用向服务端暴露的最深处
- **常见配置路径** — 对每个源探测一次简短且知名的列表(`/.env`、`/config.json`、`/firebase-config.json`、…)
- **Web storage** — `localStorage` 和 `sessionStorage`
- **网络流量** — `key=` 查询参数、`X-Goog-Api-Key` 以及 `Authorization: Bearer` / `x-api-key` headers
- Resource-timing 条目
- **每个 key 仅记录一条结果。** 一个 key 只会被记录一次,并补充其出现的所有来源、页面和源信息 — 没有重复。
- **主动 key 审计**(可选择开启,由用户触发),针对当前的 Google endpoints:
- **Maps web services** — Static Maps、Geocoding、Directions、Distance Matrix、Elevation、Time Zone、Street View metadata、Places (legacy)
- **Maps JavaScript API loader** — 解析 runtime 错误 token(`RefererNotAllowedMapError`、`ApiNotActivatedMapError`、…)
- **现代 API** — Routes API (New)、Places API (New)、Roads
- **AI API** — Gemini Developer API (AI Studio)、Vertex AI express mode、Gemini embeddings
- **Cloud AI/ML** — Cloud Translation、Vision、Natural Language、Text-to-Speech、Speech-to-Text
- **其他 Google Cloud / Firebase** — Firebase Identity Toolkit (Auth)、YouTube Data API、Safe Browsing、Cloud Storage
- **限制与风险评估。** 由于探测请求不携带 referrer 且来自任意 IP,任何成功的响应都意味着该 key **没有**被 referrer/IP 锁定。未受限制的 keys 会被显著标记(**CRITICAL / UNRESTRICTED**)并置顶显示。
- **计费感知。** 每次探测都会标记为免费或计费,并附有大概的成本说明。默认审计仅使用**免费**访问检查;基于 token 计费的调用必须由用户明确选择开启。
- **研究仪表板**,具有实时进度条、每个 key 的详细信息,以及用于记录保存的 **JSON / CSV 导出 + 导入**。
- **My Collection** — 使用 **Save** 按钮收藏任何 key;专用的持久化收藏页面允许您重新查看、注释、重新审计并导出已保存的 keys。它单独存储,因此在执行“Clear all”后依然保留。
- **域名忽略列表** — 在嘈杂的第一方域名上跳过检测(默认包括所有 **google.\*** 和 Google 服务、YouTube、Facebook、Instagram、Yahoo;可以在仪表板中扩展此列表)。保存该列表时还会清除这些域名中已存储的所有 keys。
- **分组仪表板** — 发现的结果按稳定记录的顺序,分组在可折叠、**带有编号的域名** headers 下(显示 key 数量 + 未受限制 key 的警告),每个都带有一个 **"Audit all in domain"** 按钮。当您进行审计时,行和组永远不会重新排序,因此内容不会发生跳动。
- **具备弹性** — 对瞬时错误进行有界重试和退避、并发限制,以及对 bundle 扫描的大小限制。
## 工作原理
```
┌─ content scripts ─────────────┐ ┌─ service worker (background.js) ──────────┐
│ patterns.js + content.js │ │ • webRequest: key= params & X-Goog-Api-Key │
│ • scan DOM / storage / timing │ ──▶ │ • fetch & scan external JS bundles │
│ • forward