Supabase检测技能Skill supabase-detect

这个技能用于检测Web应用是否使用Supabase作为后端服务,通过分析客户端代码、网络请求模式和API端点,提供高置信度的安全审计和渗透测试支持。关键词:Supabase检测、Web应用安全、渗透测试、API分析、网络安全审计。

安全审计 0 次安装 0 次浏览 更新于 3/18/2026

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

下一步

检测后:

  1. 运行supabase-extract-url以确认并提取项目URL
  2. 运行supabase-extract-anon-key以查找API密钥
  3. 或使用supabase-pentest进行完整指导审计

强制:渐进式上下文文件更新

⚠️ 此技能必须在执行期间渐进式更新跟踪文件,而不是仅在结束时。

关键规则:在过程中写入

不要在最后批量写入所有内容。而是:

  1. 在开始任何操作前 → 记录操作到.sb-pentest-audit.log
  2. 每次发现后 → 立即更新.sb-pentest-context.json
  3. 每次重要步骤后 → 记录完成到.sb-pentest-audit.log

这确保如果技能被中断、崩溃或超时,所有到该点的发现都已保存。

必需操作(渐进式)

  1. 创建/更新.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"
      }
    }
    
  2. 创建/记录到.sb-pentest-audit.log

    [TIMESTAMP] [supabase-detect] [START] 开始Supabase检测
    [TIMESTAMP] [supabase-detect] [SUCCESS] 检测到Supabase,置信度高
    [TIMESTAMP] [supabase-detect] [CONTEXT_UPDATED] .sb-pentest-context.json已创建/更新
    
  3. 重要:作为审计链中的第一个技能,此技能负责创建上下文文件(如果不存在)。

未能更新上下文文件是不可接受的。

强制:证据收集

📁 证据目录: .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 — 从代码中提取项目URL
  • supabase-extract-anon-key — 查找匿名密钥
  • supabase-pentest — 完整编排审计