name: supabase-detect description: 通过分析客户端代码、网络模式和API端点来检测Web应用是否使用Supabase。
Supabase检测
🔴 关键:需要渐进式文件更新
您必须在过程中写入上下文文件,而不是只在结束时。
- 每次发现后立即写入
.sb-pentest-context.json- 每次操作前后记录到
.sb-pentest-audit.log- 不要等待技能完成后再更新文件
- 如果技能崩溃或被中断,所有先前发现必须已保存
这不是可选的。未能渐进式写入是关键错误。
此技能确定Web应用是否使用Supabase作为其后端。
何时使用此技能
- 对未知应用程序启动安全审计时
- 在运行其他审计技能前验证Supabase使用情况
- 快速检查多个应用程序是否存在Supabase
先决条件
- 目标URL必须公开可访问
- 互联网连接以获取和分析目标
检测方法
此技能使用多种检测向量:
1. 域名模式匹配
在以下内容中搜索Supabase相关域名:
- HTML源代码
- JavaScript包
- 网络请求(通过内联脚本)
检测到的模式:
*.supabase.co
*.supabase.com
supabase-cdn.com
2. JavaScript客户端检测
查找Supabase客户端库签名:
// 导入模式
import { createClient } from '@supabase/supabase-js'
const { createClient } = require('@supabase/supabase-js')
// 客户端初始化
supabase.createClient(
createClient('https://
SUPABASE_URL
NEXT_PUBLIC_SUPABASE
VITE_SUPABASE
REACT_APP_SUPABASE
3. API端点检测
检查特征性Supabase端点:
/rest/v1/
/auth/v1/
/storage/v1/
/realtime/v1/
/functions/v1/
4. 响应头分析
查找Supabase特定头:
x-supabase-*
sb-*
用法
基本检测
检查https://myapp.example.com是否使用Supabase
详细输出检测
在https://myapp.example.com上检测Supabase,提供完整详情
输出格式
检测到Supabase
═══════════════════════════════════════════════════════════
检测到SUPABASE
═══════════════════════════════════════════════════════════
目标:https://myapp.example.com
状态:✅ Supabase使用已确认
检测证据:
├── 域名:abc123def.supabase.co(在main.js中找到)
├── 客户端:检测到@supabase/supabase-js v2.x
├── 端点:/rest/v1/、/auth/v1/、/storage/v1/
└── 头:存在x-supabase-api-version
项目引用:abc123def
项目URL:https://abc123def.supabase.co
上下文已保存到:.sb-pentest-context.json
═══════════════════════════════════════════════════════════
未检测到Supabase
═══════════════════════════════════════════════════════════
检测结果
═══════════════════════════════════════════════════════════
目标:https://myapp.example.com
状态:❌ 未检测到Supabase
已扫描:
├── HTML源代码:无Supabase模式
├── JavaScript包:分析3个文件,无匹配
├── 网络模式:无Supabase端点
└── 响应头:无Supabase头
注意:应用可能使用自托管Supabase或自定义域名。
如果您已知Supabase URL,请手动提供。
═══════════════════════════════════════════════════════════
上下文输出
检测到Supabase时,技能保存到.sb-pentest-context.json:
{
"target_url": "https://myapp.example.com",
"detection": {
"detected": true,
"confidence": "high",
"timestamp": "2025-01-31T10:00:00Z",
"evidence": [
{
"type": "domain",
"value": "abc123def.supabase.co",
"location": "/static/js/main.js",
"line": 1247
},
{
"type": "client_library",
"value": "@supabase/supabase-js",
"version": "2.x"
}
]
},
"supabase": {
"project_ref": "abc123def",
"project_url": "https://abc123def.supabase.co"
}
}
审计日志条目
每次检测记录到.sb-pentest-audit.log:
[2025-01-31T10:00:00Z] DETECTION_START target=https://myapp.example.com
[2025-01-31T10:00:01Z] FETCH_HTML status=200 size=45KB
[2025-01-31T10:00:02Z] FETCH_JS file=main.js status=200 size=1.2MB
[2025-01-31T10:00:03Z] PATTERN_MATCH type=domain value=abc123def.supabase.co
[2025-01-31T10:00:03Z] DETECTION_COMPLETE result=detected confidence=high
置信度级别
| 级别 | 标准 |
|---|---|
| 高 | 多种证据类型(域名+客户端+端点) |
| 中 | 单个强证据(域名或显式客户端初始化) |
| 低 | 仅间接证据(通用模式,可能误报) |
边缘情况
自定义域名
一些Supabase项目使用自定义域名(如api.mycompany.com)。在这种情况下:
在https://myapp.com上检测Supabase,使用自定义API域名api.mycompany.com
自托管Supabase
自托管实例不会有.supabase.co域名。查找:
- PostgREST模式(
/rest/v1/) - GoTrue认证模式(
/auth/v1/) - 代码中的Supabase客户端库
单页面应用
对于延迟加载块的SPA:
在https://myapp.com上检测Supabase,包括所有JS块
常见问题
❌ 问题: 在SPA上检测返回假阴性 ✅ 解决方案: 应用可能延迟加载Supabase。尝试先与应用交互以加载所有块,或提供已知模式。
❌ 问题: 检测到多个Supabase项目 ✅ 解决方案: 这在多租户设置中可能发生。技能将列出所有找到的项目。
❌ 问题: 检测速度慢
✅ 解决方案: 大型JS包分析需要时间。使用--quick模式进行更快但不太彻底的检测:
快速检测https://myapp.com上的Supabase
下一步
检测后:
- 运行
supabase-extract-url以确认并提取项目URL - 运行
supabase-extract-anon-key以查找API密钥 - 或使用
supabase-pentest进行完整指导审计
强制:渐进式上下文文件更新
⚠️ 此技能必须在执行期间渐进式更新跟踪文件,而不是仅在结束时。
关键规则:在过程中写入
不要在最后批量写入所有内容。而是:
- 在开始任何操作前 → 记录操作到
.sb-pentest-audit.log - 每次发现后 → 立即更新
.sb-pentest-context.json - 每次重要步骤后 → 记录完成到
.sb-pentest-audit.log
这确保如果技能被中断、崩溃或超时,所有到该点的发现都已保存。
必需操作(渐进式)
-
创建/更新
.sb-pentest-context.json以包含结果:{ "target_url": "https://myapp.example.com", "detection": { "detected": true, "confidence": "high", "timestamp": "...", "evidence": [ ... ] }, "supabase": { "project_ref": "abc123def", "project_url": "https://abc123def.supabase.co" } } -
创建/记录到
.sb-pentest-audit.log:[TIMESTAMP] [supabase-detect] [START] 开始Supabase检测 [TIMESTAMP] [supabase-detect] [SUCCESS] 检测到Supabase,置信度高 [TIMESTAMP] [supabase-detect] [CONTEXT_UPDATED] .sb-pentest-context.json已创建/更新 -
重要:作为审计链中的第一个技能,此技能负责创建上下文文件(如果不存在)。
未能更新上下文文件是不可接受的。
强制:证据收集
📁 证据目录: .sb-pentest-evidence/01-detection/
要创建的证据文件
| 文件 | 内容 |
|---|---|
initial-scan.json |
包含所有证据的原始检测结果 |
supabase-endpoints.txt |
发现的Supabase端点列表 |
client-code-snippets/ |
包含相关代码片段的目录 |
证据格式
{
"evidence_id": "DET-001",
"timestamp": "2025-01-31T10:00:00Z",
"category": "detection",
"target_url": "https://myapp.example.com",
"detection_results": {
"supabase_detected": true,
"confidence": "high",
"project_url": "https://abc123def.supabase.co",
"project_ref": "abc123def"
},
"evidence": [
{
"type": "domain_pattern",
"value": "abc123def.supabase.co",
"location": "/static/js/main.js",
"line": 1247,
"context": "const SUPABASE_URL = 'https://abc123def.supabase.co'"
},
{
"type": "client_library",
"value": "@supabase/supabase-js",
"version": "2.x"
}
],
"curl_command": "curl -s 'https://abc123def.supabase.co/rest/v1/' -H 'apikey: [ANON_KEY]'"
}
添加到curl-commands.sh
# === 检测 ===
# 检查Supabase API可用性
curl -s "$SUPABASE_URL/rest/v1/" -H "apikey: $ANON_KEY" | head -100
添加到timeline.md
## [TIMESTAMP] - 检测阶段完成
- 以[confidence]置信度检测到Supabase
- 项目:[project_ref]
- 证据:`01-detection/initial-scan.json`
相关技能
supabase-extract-url— 从代码中提取项目URLsupabase-extract-anon-key— 查找匿名密钥supabase-pentest— 完整编排审计