名称: supabase-extract-url 描述: 从客户端JavaScript代码、环境变量和配置文件中提取Supabase项目URL。
Supabase URL提取
🔴 关键:需要逐步文件更新
您必须随着进展写入上下文文件,而不仅仅是在最后。
- 在每次发现后立即写入
.sb-pentest-context.json- 在每次操作前后记录到
.sb-pentest-audit.log- 不要等到技能完成才更新文件
- 如果技能崩溃或中断,所有先前发现必须已保存
这是强制性的。不逐步写入是关键错误。
这个技能从Web应用程序的客户端代码中提取Supabase项目URL。
何时使用此技能
- 检测到Supabase使用后,以获取确切的项目URL
- 当您需要API基础URL进行进一步测试时
- 识别应用程序使用的Supabase项目
前提条件
- 目标URL可访问
- Supabase使用已检测(或怀疑)
工作原理
技能扫描URL模式在:
1. JavaScript源代码
// 直接URL引用
const SUPABASE_URL = 'https://abc123.supabase.co'
createClient('https://abc123.supabase.co', key)
// 环境变量模式
process.env.SUPABASE_URL
process.env.NEXT_PUBLIC_SUPABASE_URL
import.meta.env.VITE_SUPABASE_URL
2. HTML元标签和脚本
<meta name="supabase-url" content="https://abc123.supabase.co">
<script>
window.SUPABASE_URL = 'https://abc123.supabase.co'
</script>
3. 配置对象
const config = {
supabase: {
url: 'https://abc123.supabase.co'
}
}
URL模式匹配
识别的模式:
| 模式 | 示例 |
|---|---|
| 标准 | https://abc123.supabase.co |
| 带区域 | https://abc123.eu-central-1.supabase.co |
| 自定义域名 | 通过API端点模式检测 |
用法
基本提取
从 https://myapp.example.com 提取Supabase URL
从本地文件
如果您已下载源代码:
从 ./dist/assets/ 提取Supabase URL
输出格式
═══════════════════════════════════════════════════════════
SUPABASE URL 已提取
═══════════════════════════════════════════════════════════
项目URL: https://abc123def.supabase.co
项目引用: abc123def
区域: us-east-1 (推断)
发现位置:
├── /static/js/main.abc123.js (行 1247)
│ └── const SUPABASE_URL = 'https://abc123def.supabase.co'
│
└── /static/js/chunk.def456.js (行 89)
└── createClient('https://abc123def.supabase.co', ...)
API端点:
├── REST API: https://abc123def.supabase.co/rest/v1/
├── Auth API: https://abc123def.supabase.co/auth/v1/
├── Storage: https://abc123def.supabase.co/storage/v1/
└── Realtime: wss://abc123def.supabase.co/realtime/v1/
上下文已更新: .sb-pentest-context.json
═══════════════════════════════════════════════════════════
上下文输出
保存到.sb-pentest-context.json:
{
"supabase": {
"project_url": "https://abc123def.supabase.co",
"project_ref": "abc123def",
"region": "us-east-1",
"endpoints": {
"rest": "https://abc123def.supabase.co/rest/v1/",
"auth": "https://abc123def.supabase.co/auth/v1/",
"storage": "https://abc123def.supabase.co/storage/v1/",
"realtime": "wss://abc123def.supabase.co/realtime/v1/",
"functions": "https://abc123def.supabase.co/functions/v1/"
},
"sources": [
{
"file": "/static/js/main.abc123.js",
"line": 1247,
"context": "const SUPABASE_URL = 'https://abc123def.supabase.co'"
}
]
}
}
多个URL
如果找到多个Supabase URL:
═══════════════════════════════════════════════════════════
找到多个SUPABASE URL
═══════════════════════════════════════════════════════════
⚠️ 检测到多个Supabase项目
1. https://abc123.supabase.co (主要 - 最多引用)
└── 发现位置: main.js, config.js
2. https://xyz789.supabase.co (次要)
└── 发现位置: analytics.js
使用主要URL进行进一步分析。
要使用不同URL,请手动指定。
═══════════════════════════════════════════════════════════
验证
技能通过以下方式验证提取的URL:
- 格式检查 — 匹配预期的Supabase URL模式
- 可达性检查 — 尝试访问REST API端点
- 响应验证 — 确认Supabase样式的响应
验证:
├── 格式: ✅ 有效的Supabase URL格式
├── 可达: ✅ REST API响应 (200 OK)
└── 确认: ✅ 响应匹配Supabase模式
常见问题
❌ 问题: 尽管检测到Supabase,但未找到URL ✅ 解决方案: URL可能在动态加载的块中。尝试:
从 https://myapp.example.com 进行深度扫描提取URL
❌ 问题: 找到URL但验证失败 ✅ 解决方案: 项目可能已暂停或区域连接问题。URL仍被记录。
❌ 问题: 仅找到自定义域名 ✅ 解决方案: 自定义域名有效。技能将标记为自定义域名并尝试识别底层项目。
安全说明
- 此技能仅读取公开可用代码
- 不尝试身份验证
- URL本身不授予访问权限(还需要密钥)
后续步骤
提取URL后:
- 运行
supabase-extract-anon-key以查找API密钥 - 运行
supabase-extract-service-key以检查泄露的服务密钥 - 继续API审计技能
强制:逐步上下文文件更新
⚠️ 此技能必须在执行期间逐步更新跟踪文件,而不是仅在最后。
关键规则:逐步写入
不要在最后批量写入所有内容。相反:
- 在开始任何操作前 → 将操作记录到
.sb-pentest-audit.log - 在每次发现后 → 立即更新
.sb-pentest-context.json - 在每次重要步骤后 → 将完成记录到
.sb-pentest-audit.log
这确保如果技能中断、崩溃或超时,所有截至该点的发现都得以保存。
所需操作(逐步)
-
更新
.sb-pentest-context.json包含提取的数据:{ "supabase": { "project_url": "https://[ref].supabase.co", "project_ref": "[ref]", "endpoints": { ... } } } -
记录到
.sb-pentest-audit.log:[时间戳] [supabase-extract-url] [开始] 开始URL提取 [时间戳] [supabase-extract-url] [成功] URL已提取: https://[ref].supabase.co [时间戳] [supabase-extract-url] [上下文已更新] .sb-pentest-context.json 已更新 -
如果文件不存在,在写入前创建它们。
不更新上下文文件是不可接受的。
强制:证据收集
📁 证据目录: .sb-pentest-evidence/02-extraction/
要创建的证据文件
| 文件 | 内容 |
|---|---|
extracted-url.json |
URL提取详细信息,包含源位置 |
证据格式
{
"evidence_id": "EXT-URL-001",
"timestamp": "2025-01-31T10:05:00Z",
"category": "extraction",
"type": "url_extraction",
"extracted_data": {
"project_url": "https://abc123def.supabase.co",
"project_ref": "abc123def",
"region": "us-east-1"
},
"sources": [
{
"file": "/static/js/main.js",
"line": 1247,
"context": "const SUPABASE_URL = 'https://abc123def.supabase.co'"
}
],
"endpoints_discovered": {
"rest": "https://abc123def.supabase.co/rest/v1/",
"auth": "https://abc123def.supabase.co/auth/v1/",
"storage": "https://abc123def.supabase.co/storage/v1/",
"realtime": "wss://abc123def.supabase.co/realtime/v1/"
}
}
相关技能
supabase-detect— 首先检测Supabase使用supabase-extract-anon-key— 提取匿名密钥supabase-extract-service-key— 检查服务密钥泄露