mcpField
R
repomix-safe-mixer

repomix-safe-mixer

github.com/daymade安全1.5k917 次安装今天更新
代码仓库

关于 repomix-safe-mixer

面向代码库打包安全的技能,会在使用 repomix 打包前扫描硬编码凭据;发现潜在秘密时报告位置并阻止打包,也可单独扫描审计。

主要功能

  1. 01扫描常见凭据模式
  2. 02报告发现项的文件与行号
  3. 03发现秘密时阻止打包
  4. 04单独扫描并输出 JSON
  5. 05传递 repomix 配置和输出选项

适用场景

  1. 01分享 repomix 包前检查项目
  2. 02提交代码前审计代码库
  3. 03确认凭据已清理
  4. 04扫描无异常后打包项目

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/daymade/claude-code-skills --skill repomix-safe-mixer

安装后在 Claude Code 中输入/repomix-safe-mixer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
common_secrets.md
scripts/
safe_pack.py
scan_secrets.py

详细介绍

Repomix 安全混合器

概述

使用 repomix 打包代码库时,自动检测并移除硬编码凭据,确保安全。

此技能可防止使用 repomix 打包代码时意外暴露凭据。它会扫描硬编码密钥(API 密钥、数据库凭据、令牌),报告发现项,并确保安全打包。

使用场景:使用 repomix 打包代码以便分发、创建可共享的参考包,或任何担心代码中存在硬编码凭据的情况。

核心工作流

标准安全打包

使用此技能 scripts/ 目录中的 safe_pack.py 完成完整工作流:扫描 → 报告 → 打包。

python3 scripts/safe_pack.py <directory>

功能:

  1. 扫描目录中的硬编码凭据
  2. 报告发现项及其文件和行号详情
  3. 如果发现密钥,则阻止打包
  4. 仅在扫描通过时使用 repomix 打包

示例:

python3 scripts/safe_pack.py ./my-project

扫描通过时的输出:

🔍 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

独立密钥扫描

使用此技能 scripts/ 目录中的 scan_secrets.py 仅进行扫描(不打包)。

python3 scripts/scan_secrets.py <directory>

使用场景:

  • 移除凭据后验证清理结果
  • 提交前安全检查
  • 审计现有代码库

示例:

python3 scripts/scan_secrets.py ./my-project

用于程序处理的 JSON 输出:

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

排除匹配模式:

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

检测到的密钥类型

扫描器会检测常见凭据模式,包括:

云服务提供商:

  • 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。

处理检测到的密钥

发现密钥时:

第 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 历史记录扫描或全面的安全审计。

评论

支持 Markdown