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