Perufitlife/pocketbase-security-skill

GitHub: Perufitlife/pocketbase-security-skill

一款针对PocketBase的安全审计工具,通过检测规则配置失误并主动探测确认数据泄露,帮助开发者在部署前发现和修复常见的安全隐患。

Stars: 2 | Forks: 0

# PocketBase 安全审计员 [![npm](https://img.shields.io/npm/v/pocketbase-security?color=red)](https://www.npmjs.com/package/pocketbase-security) ![license](https://img.shields.io/badge/license-MIT-green) ![node](https://img.shields.io/badge/node-%3E%3D18-blue) ## 为什么需要这个工具 PocketBase API 规则编写起来很容易,但也极容易被设置得过于宽松。我经常看到以下三种模式: - **空规则** — 将 `listRule` 留空意味着该集合完全公开。任何人都可以在未经身份验证的情况下列出所有记录。 - **`@request.auth.id != ""`** — 看似具有限制性,但实际上允许任何已登录的用户(包括自行注册的匿名用户)读取或写入整个集合。 - **`true` 字面量** — 本地开发时遗留的产物,其计算结果为“始终允许”。 此审计工具可以通过一条命令找出所有集合中存在的这三种情况。 ## 安装与运行 ``` npx pocketbase-security \ --url https://my.pocketbase.io \ --email admin@me.io \ --password $PB_ADMIN_PASS \ --html report.html ``` 或通过环境变量运行: ``` POCKETBASE_URL=https://my.pb.io \ POCKETBASE_ADMIN_EMAIL=admin@me.io \ POCKETBASE_ADMIN_PASSWORD=$PB_ADMIN_PASS \ npx pocketbase-security --html report.html ``` ## 检查内容 | # | 检查项 | 严重程度 | |---|---|---| | 1 | API 规则为空(该操作的集合完全公开) | **严重 (CRITICAL)** | | 2 | API 规则为 `@request.auth.id != ""`(任何已登录用户均可通过) | 高 | | 3 | API 规则包含 `true` 字面量(绕过所有检查) | 高 | | 4 | Auth 集合开启了开放注册 + 宽松的创建规则(组合漏洞) | 高 | | 5 | 启用了 OAuth2 提供程序,但未设置重定向 URL 白名单 | 中 | | 6 | Email 身份验证未强制要求验证 | 中 | | 7 | S3 存储存在 debug 级别日志泄露风险 | 低 | 每项发现都附带了一段修复代码片段,您可以直接粘贴回 PocketBase 的管理后台 UI 中。 ## 主动探测 默认:开启。在识别出可疑集合(空规则、宽松的身份验证、危险字面量)后,审计工具会向 `/api/collections/{name}/records?perPage=1` 发送一个**匿名 GET** 请求。如果请求返回数据,该发现将被标记为 `confirmed: true`,并附带一个样本,显示泄露的行数、可见列以及泄露的字节数。 传入 `--no-probe` 可以跳过实时请求(仅限被动模式,根据规则元数据进行推断)。 ## 输出 - **HTML 报告** — 独立文件(约 25KB,通过 CDN 引入 Tailwind + Chart.js)。顶部横幅显示 N 个疑似泄露中有 X 个已被实时确认。当探测成功时,每张发现卡片都会显示一个红色的“CONFIRMED LEAK”(已确认泄露)区块。 - **JSON** — 完整的结构化发现结果(未指定 `--html` 标志时的默认标准输出)。 ## 如何获取管理员密码 您在初始化 PocketBase 时已创建过该密码。如果忘记了,可以在宿主机上通过 PB CLI 重置:`./pocketbase admin update `。 该密码仅用于本次运行的管理员身份验证调用(collections 端点需要管理员 token)。审计工具绝不会持久化保存该密码。 ## 集成模式参考 请参阅 [`rotatepilot-skyx-sandbox`](https://github.com/Perufitlife/rotatepilot-skyx-sandbox),查看合作伙伴如何在单个静态页面中使用我们的公共 REST API 的实时演示——该页面构建于 2026 年 5 月 12 日,旨在响应航空平台合作的入站请求。我们在此使用的就是与 `pocketbase-security` 集成相同的 JSON 契约 / CORS / 边缘服务方案。 ## 许可证 MIT。免费开源。由 [@Perufitlife](https://github.com/Perufitlife) 构建。 关于 Supabase,请参阅姊妹工具:https://github.com/Perufitlife/supabase-security-skill
标签:API安全, BaaS, CISA项目, DevSecOps, GNU通用公共许可证, JSON输出, MITM代理, Node.js, npx, OAuth2安全, PocketBase, S3安全, 上游代理, 代码安全, 后端即服务, 多模态安全, 安全报告, 安全测试, 密码管理, 开源, 攻击性安全, 无线安全, 暗色界面, 未授权访问, 权限配置, 漏洞枚举, 空规则, 网络安全, 自定义脚本, 规则检测, 越权访问, 隐私保护