SuperAPI AI 工具集

repomix-safe-mixer

安全与审计

查看项目

更新于 10-15 14:25

技能介绍

用途

repomix-safe-mixer 用于在通过 repomix 打包代码库时,自动检测并移除硬编码凭据,防止在分发或共享代码包时意外泄露敏感信息。它适用于以下场景:使用 repomix 打包代码用于分发、创建可共享的参考包,或任何担心代码中存在硬编码凭据的安全场景。

主要能力

该技能提供两个脚本:

  • safe_pack.py:完整的扫描→报告→打包工作流。扫描目录中的硬编码凭据,报告发现的问题(含文件/行号),若发现密钥则阻止打包,仅在扫描通过时使用 repomix 打包。
  • scan_secrets.py:独立的密钥扫描工具,不执行打包。可用于验证清理结果、提交前安全检查、审计现有代码库。支持 JSON 输出以便程序化使用。

可检测的凭据类型包括:

  • 云服务商:AWS 访问密钥(AKIA...)、Cloudflare R2 账户 ID 和访问密钥、Supabase 项目 URL 和匿名密钥
  • API 密钥:Stripe 密钥(sk_live_...、pk_live_...)、OpenAI API 密钥(sk-...)、Google Gemini API 密钥(AIza...)、通用 API 密钥
  • 认证相关:JWT 令牌(eyJ...)、OAuth 客户端密钥、私钥(-----BEGIN PRIVATE KEY-----)、Turnstile 密钥(0x...)

完整列表和模式参见 references/common_secrets.md。

使用方式

标准安全打包

python3 scripts/safe_pack.py <directory>

若扫描通过,输出类似:

🔍 Scanning ./my-project for hardcoded secrets...
✅ No secrets detected!
📦 Packing ./my-project with repomix...
✅ Packaging complete!
   Package is safe to distribute.

若发现密钥,输出类似:

🔍 Scanning ./my-project for hardcoded secrets...
⚠️  Security Scan Found 3 Potential Secrets:

🔴 supabase_url: 1 instance(s)
   - src/client.ts:5
     Match: https://your-project-ref.supabase.co

❌ Cannot pack: Secrets detected!

选项

自定义输出文件:

python3 scripts/safe_pack.py \
  ./my-project \
  --output package.xml

使用 repomix 配置:

python3 scripts/safe_pack.py \
  ./my-project \
  --config repomix.config.json

排除扫描模式:

python3 scripts/safe_pack.py \
  ./my-project \
  --exclude '.*test.*' '.*\.example'

强制打包(危险,跳过扫描):

python3 scripts/safe_pack.py \
  ./my-project \
  --force  # ⚠️ NOT RECOMMENDED

独立密钥扫描

python3 scripts/scan_secrets.py <directory>

JSON 输出:

python3 scripts/scan_secrets.py \
  ./my-project \
  --json

排除模式:

python3 scripts/scan_secrets.py \
  ./my-project \
  --exclude '.*test.*' '.*example.*' '.*SECURITY_AUDIT\.md'

处理检测到的密钥

发现密钥后,建议按以下步骤处理:

  1. 审查发现:检查每个发现,确认是真实凭据而非占位符或示例。

  2. 替换为环境变量:将硬编码值改为环境变量引用。例如:

    修改前:

    const SUPABASE_URL = "https://your-project-ref.supabase.co";
    const API_KEY = "<hardcoded-anon-key-DO-NOT-COMMIT>";
    

    修改后:

    const SUPABASE_URL = import.meta.env.VITE_SUPABASE_URL || "https://your-project-ref.supabase.co";
    const API_KEY = import.meta.env.VITE_API_KEY || "your-api-key-here";
    
    // Validation
    if (!import.meta.env.VITE_SUPABASE_URL) {
      console.error("⚠️ Missing VITE_SUPABASE_URL environment variable");
    }
    
  3. 创建 .env.example:

    # Example environment variables
    VITE_SUPABASE_URL=https://your-project-ref.supabase.co
    VITE_API_KEY=your-api-key-here
    
    # Instructions:
    # 1. Copy this file to .env
    # 2. Replace placeholders with real values
    # 3. Never commit .env to version control
    
  4. 验证清理:再次运行扫描器确认密钥已移除:

    python3 scripts/scan_secrets.py ./my-project
    
  5. 安全打包:清理完成后安全打包:

    python3 scripts/safe_pack.py ./my-project
    

凭据已暴露后的操作

如果凭据已经暴露(例如已提交到 git、公开分享):

  1. 立即轮换凭据——生成新的密钥/令牌
  2. 撤销旧凭据——禁用已泄露的凭据
  3. 审计使用情况——检查日志中的未授权访问
  4. 监控——设置异常活动警报
  5. 更新部署——使用新凭据部署代码
  6. 记录事件——记录暴露内容和采取的措施

常见误报

扫描器会跳过常见误报:

  • 占位符:your-api-key、example-key、placeholder-value、<YOUR_API_KEY>、${API_KEY}、TODO: add key
  • 测试/示例文件:匹配 .test.、.example.、.sample. 的文件
  • 注释:以 //、#、/、 开头的行
  • 环境变量引用(正确用法):process.env.API_KEY、import.meta.env.VITE_API_KEY、Deno.env.get('API_KEY')

如有需要,可使用 --exclude 跳过额外模式。

与 Repomix 集成

该技能与标准 repomix 配合使用:

  • 默认用法(无配置):python3 scripts/safe_pack.py ./project
  • 使用 repomix 配置:python3 scripts/safe_pack.py ./project --config repomix.config.json
  • 自定义输出位置:python3 scripts/safe_pack.py ./project --output ~/Downloads/package-clean.xml

该技能在安全验证后内部运行 repomix,并传递配置和输出选项。

示例工作流

工作流 1:打包干净项目

# Scan and pack in one command
python3 scripts/safe_pack.py \
  ~/workspace/my-project \
  --output ~/Downloads/my-project-package.xml

工作流 2:清理并打包含密钥的项目

# Step 1: Scan to discover secrets
python3 scripts/scan_secrets.py ~/workspace/my-project

# Step 2: Review findings and replace credentials with env vars
# (Edit files manually or with automation)

# Step 3: Verify cleanup
python3 scripts/scan_secrets.py ~/workspace/my-project

# Step 4: Package safely
python3 scripts/safe_pack.py \
  ~/workspace/my-project \
  --output ~/Downloads/my-project-clean.xml

工作流 3:提交前审计

# Pre-commit hook: scan for secrets
python3 scripts/scan_secrets.py . --json

# Exit code 1 if secrets found (blocks commit)
# Exit code 0 if clean (allows commit)

资源

  • references/common_secrets.md——完整凭据模式目录
  • scripts/scan_secrets.py——独立安全扫描器
  • scripts/safe_pack.py——完整扫描→打包工作流

相关技能:

  • repomix-unmixer——从 repomix 包中提取文件
  • skill-creator——创建新的 Claude Code 技能

安全说明

该技能检测常见模式,但可能无法捕获所有凭据类型。请始终:

  • 手动审查发现
  • 轮换已暴露的凭据
  • 使用 .env.example 模板
  • 验证环境变量
  • 监控未授权访问

它不能替代:CI/CD 中的密钥扫描、git 历史扫描或全面的安全审计。