关于 Airlock RLS
Airlock RLS 是面向 Supabase 应用开发的 MCP 服务,用于检查已部署站点的密钥泄露和数据库 RLS 配置。它通过公开 URL 扫描前端资源,并仅读取数据库目录元数据进行审计。
主要功能
- 01扫描网页和 JS 包中的 service_role 密钥
- 02审计 RLS 关闭或过宽的策略
- 03检查 anon/authenticated 租户数据泄露
- 04审计仅读取目录元数据
- 05发现密钥时不输出完整值
适用场景
- 01发布前检查前端是否泄露 Supabase 密钥
- 02检查数据库表是否启用 RLS
- 03排查租户间访问策略漏洞
MCP 相关
该 MCP 服务向 MCP 客户端提供站点密钥扫描和 Supabase RLS 审计工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| site_url | string | 是 | 要扫描的已部署网站的公开 HTTPS URL(例如 https://myapp.com)。仅允许使用公开的 HTTP(S) 主机。 |
| max_scripts | integer | 否 | 要读取的 JS 包数量(默认值:50)。如果网站上的 JS 包更多,结果会说明有多少个未扫描,而不会暗示已检查全部内容。 |
详细介绍
Airlock RLS MCP — 在 AI 编码 Agent 中检查 Supabase 泄漏
让 Cursor、Claude Code 或任何 MCP 客户端**在构建 Supabase 应用时检查泄漏。**它能捕获最常见的氛围式编程隐患:将
service_role密钥发布到浏览器,以及 Row Level Security 处于关闭状态或配置得过于宽松。
核心引擎是 Airlock RLS(npm i airlock-rls),用于在 CI 中检查 Supabase RLS。本软件包是它的轻量 MCP 封装。
两个工具
scan_site_for_exposed_key — 提供一个已部署的网址。它会读取页面及其 JS bundle,查找泄露的 Supabase service_role 密钥(service_role JWT 或 sb_secret_... 密钥)。无需数据库或凭据,只需公开网址。只要检测到密钥,任何读到它的人都可以绕过所有 RLS 策略。它绝不会打印完整密钥。
audit_supabase_rls — 提供一个 Postgres 连接字符串。发现 RLS 已关闭的表、过于宽松(始终为 true)的策略,以及 anon/authenticated 租户泄漏时,该工具会报错。它只会读取目录元数据(pg_tables、pg_policies、授权信息),绝不会读取你的行数据,因此只读角色就足够了。
添加到 MCP 客户端
{
"mcpServers": {
"airlock": {
"command": "npx",
"args": ["-y", "airlock-rls-mcp"]
}
}
}
Cursor(~/.cursor/mcp.json)、Claude Desktop(claude_desktop_config.json)及其他 MCP 客户端使用的配置块相同。使用 Claude Code 时:
claude mcp add airlock -- npx -y airlock-rls-mcp
然后向 Agent 提出类似 “扫描 https://myapp.com,查找泄露的 Supabase 密钥” 或 “审计此数据库的 RLS” 这样的请求,它就会调用相应工具。
要求
Node.js 18 或更高版本。
开发
npm install
npm run smoke # starts the server and checks both tools are advertised
更多信息
Supabase RLS 指南、跨租户实时演示,以及托管版 Airlock Monitor(持续检查实时数据库):shipsealed.com
许可证
MIT © Mateus Zingano
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。