Perufitlife/firebase-security-skill
GitHub: Perufitlife/firebase-security-skill
专门审计 Firebase Firestore 安全规则的轻量工具,通过静态模式分析加主动匿名探测,发现并确认规则误配置导致的数据泄露风险。
Stars: 1 | Forks: 0
# Firebase Firestore 规则安全审计
[](https://www.npmjs.com/package/firebase-security)  
## 为什么会存在这个工具
Firebase Firestore 规则很容易写错,而且其失败模式是最糟糕的:静默且全面地暴露。我经常反复看到以下模式:
- **`match /{document=**} { allow read, write: if true; }`** — `firebase init` 遗留的产物。任何拥有项目 ID 的人都可以转储(dump)所有集合。曾多次登上 Hacker News 头条。
- **`request.time < timestamp.date(2026, 6, 1)`** — Firebase 在测试模式下生成的规则。在一个日期后过期,但在该日期之前是完全敞开的。
- **`if request.auth != null`** 但没有进行所有权检查 — 与 PocketBase 的 `@request.auth.id != ""` 反模式相同。任何通过匿名身份验证的用户都可以读写所有内容。
- **读取开放 + 写入关闭的兜底匹配** — 开发者锁定了写入,却忘记了读取仍然是公开的。
- **用户上传文件的 Storage `allow read: if true`** — 暴露了私密文件(个人身份信息文档、支付凭证)。
## 安装与运行
针对本地规则文件运行(无需身份验证):
```
npx firebase-security firestore.rules
```
开启主动探测(向项目的 REST 端点发送匿名 GET 请求):
```
npx firebase-security firestore.rules --project-id my-firebase-project --html report.html
```
仅探测模式(不需要规则文件,仅验证已部署的数据库是否允许匿名读取):
```
npx firebase-security --project-id my-firebase-project --html report.html
```
## 检查内容
| # | 检查项 | 严重程度 |
|---|---|---|
| 1 | `match /{document=**}` 搭配 `if true`(臭名昭著的完全开放模式) | **CRITICAL** |
| 2 | 规则中任意位置出现 `if true` 字面量 | **CRITICAL** |
| 3 | 包含 `if request.auth != null` 但没有所有权检查 | HIGH |
| 4 | 测试模式的时间戳规则(在过期日期前处于开放状态) | HIGH |
| 5 | 兜底匹配中读取开放 + 写入关闭 | MEDIUM |
| 6 | Storage 规则中用户上传文件存在开放读取权限 | HIGH |
| 7 | 缺少显式的默认拒绝块 | INFO |
每项发现都附带一段修复代码片段,您可以直接粘贴回 `firestore.rules` 中。
## 主动探测
探测功能会向以下地址发送未经身份验证的 GET 请求:
```
https://firestore.googleapis.com/v1/projects/{project-id}/databases/(default)/documents
```
如果返回了文档,则说明该项目的默认数据库存在泄露,并且发现结果将被标记为 `confirmed: true`,同时附带返回的文档数量 + 字节数 + 示例路径。
`--no-probe` 选项可禁用此网络调用。
## 如何查找您的项目 ID
在 Firebase 控制台中:**Project Settings → General → Project ID**(类似于 `my-app-1a2b3` 或您命名的任何名称)。
探测只会发送未经身份验证的 GET 请求 — 这与任何碰巧知道您项目 ID 的普通访客所能发送的请求完全相同。我们不需要(也不想要)您的服务账号密钥。
## 输出
- **HTML 报告** — 使用 Tailwind + Chart.js,约 25KB 的自包含文件。顶部横幅会显示经过实时确认的 Y 个疑似泄露中的 X 个。
- **JSON** — 完整的结构化发现结果(如果不指定 `--html`,则默认输出到标准输出)。
## 许可证与源码
MIT。开源地址:https://github.com/Perufitlife/firebase-security-skill
关于 BaaS 家族,请参见:
- Supabase:https://github.com/Perufitlife/supabase-security-skill
- PocketBase:https://github.com/Perufitlife/pocketbase-security-skill
- Appwrite:https://github.com/Perufitlife/appwrite-security-skill
- Hasura/Nhost:https://github.com/Perufitlife/nhost-security-skill
## 集成模式参考
请参阅 [`rotatepilot-skyx-sandbox`](https://github.com/Perufitlife/rotatepilot-skyx-sandbox),查看合作伙伴如何在单个静态页面中使用我们的公共 REST API 的实时演示 — 该项目构建于 2026 年 5 月 12 日,旨在回应一家航空平台的合作引入。我们采用了与 `firebase-security` 集成相同的 JSON 契约 / CORS / 边缘服务方案。
## 姊妹 AI 文本工具
如果您的团队使用 AI 撰写外发邮件、PR 描述或社交媒体帖子,[aitells](https://aitells.vercel.app) 生态系统可以在这些内容发布前捕获其中的 AI 痕迹:
- [`@perufitlife/aitells-mcp`](https://www.npmjs.com/package/@perufitlife/aitells-mcp) — 适用于 Claude Code / Cursor 的 MCP server。提供 `detect_ai_tells` + `humanize_text` 作为原生工具。
- [`Perufitlife/aitells-action`](https://github.com/Perufitlife/aitells-action) — GitHub Action,用于扫描 PR 标题/正文/提交信息中的 AI 模式。会发布友好的摘要评论。
- [aitells.vercel.app](https://aitells.vercel.app) — 免费检测器 + 19 美元终身人性化工具(限前 100 名购买者)
标签:CISA项目, DevSecOps, Firebase, Firestore, GNU通用公共许可证, MITM代理, Node.js, npm包, PII泄露, REST API, Streamlit, Web安全, 上游代理, 安全合规, 开源安全工具, 暗色界面, 未授权访问, 白盒测试, 移动安全后端, 网络代理, 网络安全, 网络安全, 自定义脚本, 蓝队分析, 规则检测, 访问控制, 逆向工程平台, 隐私保护, 隐私保护, 黑盒测试