Perufitlife/supabase-security-skill
GitHub: Perufitlife/supabase-security-skill
一款开源的 Supabase 安全审计 CLI 工具,自动检测未启用 RLS 的表、公共存储桶和暴露的危险函数,并生成附带修复 SQL 的 HTML 报告。
Stars: 18 | Forks: 0
# supabase-security
```
$ supabase-security --html report.html
HTML report written to report.html
Findings: 0 critical, 5 high, 2 medium
```
[](https://www.npmjs.com/package/supabase-security) [](https://www.npmjs.com/package/supabase-security) [](https://github.com/Perufitlife/supabase-security-skill) [](https://glama.ai/mcp/servers/)  
## 为什么
在 **2026 年 5 月 30 日**,Supabase 更改了新项目的默认设置:`public` 模式中的表不再自动暴露给 Data API。在 **2026 年 10 月 30 日**,这将成为**所有现有项目**的强制默认设置。
如果您使用 Supabase 已经超过几个月,您几乎肯定会遇到以下情况:
- 表默认被授予对 `anon` 的 CRUD 权限(因为那是默认设置)。
- 一两个表遗漏了 RLS。
- 技术上可以被 `anon` 调用的 `SECURITY DEFINER` 函数。
此工具会在一个 HTML 报告中展示所有这些问题,您可以与您的团队分享该报告,并提供可复制粘贴的 SQL 来修复每个问题。
## 它能发现什么(真实示例)
我在自己的应用上运行了这个工具。两个项目,规模相似:
| 项目 | 表数量 | 严重 | 高 | 中 |
|---|---|---|---|---|
| 内部 CRM (仅限 auth) | 55 | 0 | 11 | 2 |
| 公共 Web 应用 | 139 | **17** (修复前) | 5 | 2 |
该公共应用有 **17 个禁用 RLS 的表**,并且对 anon 完全开放了 CRUD 权限。只要有人从 JS 包中提取出 anon key,数据就会泄露。通过此工具生成的一个 SQL 事务即可完成修复。
## 安装
无需安装——克隆并运行:
```
git clone https://github.com/Perufitlife/supabase-security-skill
cd supabase-security-skill
SUPABASE_ACCESS_TOKEN=sbp_xxx node scripts/audit.js YOUR_PROJECT_REF --html report.html
```
或者作为 Claude Code、Cursor、Cline 的 [Agent Skill](https://agentskills.io/) 使用:
```
# (当发布到 skills marketplace 时)
npx skills add Perufitlife/supabase-security-skill
```
然后说:“audit my Supabase project ref `xxx`”。
## 获取个人访问令牌
`https://supabase.com/dashboard/account/tokens` → “Generate new token”。读取权限即可。
## 执行的检查
| # | 检查项 | 严重程度 |
|---|---|---|
| 1 | 表禁用了 RLS 并且授予了 anon 权限 | **严重** |
| 2 | `SECURITY DEFINER` 函数(非触发器)可被 anon 执行 | 高 |
| 3 | 公共存储桶 | 高 |
| 4 | 默认权限仍向 anon 授予 CRUD(未来表风险) | 中 |
| 5 | 启用了 Auth 注册但未进行邮箱确认 | 中 |
| 6 | 受 RLS 锁定的表仍具有直接的 anon 授权(纵深防御) | 低 |
每项发现都附带可复制粘贴的修复 SQL。HTML 报告具有一个“Copy all SQL”按钮,可以一次性应用所有修复。
## 与替代方案的区别
| | 本工具 | SupaExplorer | AuditYourApp |
|---|---|---|---|
| 项目引用去向 | 您的机器 | 他们的 SaaS | 他们的 SaaS |
| 成本 | 免费,MIT | $6.75–$187 | $29/月–$499 |
| 源代码 | 公开 | 闭源 | 闭源 |
| 生成修复 SQL | 是 | Pro 版本 | Pro 版本 |
| 在 CI 中运行 | 非常简单 | API 版本 | API 版本 |
此工具的功能比那些 SaaS 产品少。权衡之下,您获得了对数据的完全控制权且无需持续付费。
## 在 CI 中运行
```
# .github/workflows/supabase-security.yml
- run: |
npx -y github:Perufitlife/supabase-security-skill \
${{ secrets.SUPABASE_PROJECT_REF }} \
--html report.html
- uses: actions/upload-artifact@v4
with: { name: supabase-security-report, path: report.html }
```
## 限制——在信任它之前请阅读这些
- 不审计每个对象的 Storage RLS(这将意味着遍历每个文件)。
- 无法通过 SQL 撤销 `supabase_admin` 的默认权限——这需要 Dashboard 中的开关切换。报告会提示您这一点。
- 故意向 anon 暴露的 App API(例如 `get_public_stats()` RPC)将显示为发现项。**由您决定哪些是有意为之。**
- Alpha 阶段。如果您发现误报或遗漏的检查,请使用相关的 `pg_*` 查询的 SQL 输出提交一个 issue,我会对其进行修复。
## 路线图
- [ ] Storage 对象级别扫描
- [ ] `pg_cron` 定时任务审计
- [ ] Edge Function 密钥扫描(环境变量泄露检测)
- [ ] Apify actor 包装器(一键 HTML 报告,无需安装)
- [ ] 带有 `audit` 和 `apply-fix` 工具(预览 + 回滚)的 MCP 服务器
## 集成模式参考
请参阅 [`rotatepilot-skyx-sandbox`](https://github.com/Perufitlife/rotatepilot-skyx-sandbox),了解合作伙伴如何在单个静态页面中使用我们的公共 REST API 的现场演示——该页面于 2026 年 5 月 12 日构建,以响应航空平台合作的引入。我们为 `supabase-security` 集成使用了相同的 JSON 契约 / CORS / 边缘服务方法。
## 姊妹 AI 文本工具
如果您的团队使用 AI 撰写外联信息、PR 描述或社交帖子,[aitells](https://aitells.vercel.app) 生态系统会在它们发布前捕捉到这些特征:
- [`@perufitlife/aitells-mcp`](https://www.npmjs.com/package/@perufitlife/aitells-mcp) —— 用于 Claude Code / Cursor 的 MCP 服务器。提供 `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 名购买者)
## 许可证
MIT。
标签:API安全, BaaS安全, CISA项目, DevSecOps, JSON输出, MITM代理, Node.js命令行工具, PostgreSQL安全, RLS策略检查, Supabase安全审计, T1078, T1087, T1190, 上游代理, 公共存储桶检测, 匿名访问探测, 安全报告生成, 安全检测工具, 开源安全工具, 数据泄露防护, 暗色界面, 测试用例, 网络探测, 逆向工程平台