mcpField
S
sanitize-git-repo

sanitize-git-repo

github.com/letta-ai安全15236 次安装4 周前更新
代码仓库

关于 sanitize-git-repo

该技能指导在 Git 仓库中系统查找并替换密钥、令牌和密码等敏感信息,适用于共享代码前的清理和安全审查准备。它强调先盘点所有出现位置,再逐项替换并复查;是否清理 Git 历史需另行确认。

主要功能

  1. 01搜索常见凭据模式
  2. 02检查配置、文档与测试数据
  3. 03记录敏感值及其出现位置
  4. 04一致替换所有匹配项
  5. 05复查残留并运行测试

适用场景

  1. 01共享或开源前清理仓库
  2. 02移除误提交的凭据
  3. 03审查代码中的敏感信息

安装

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

$npx skills add https://github.com/letta-ai/skills --skill sanitize-git-repo

安装后在 Claude Code 中输入/sanitize-git-repo确认已加载。

详细介绍

清理 Git 仓库

本技能提供系统性识别和替换 Git 仓库中敏感信息的指导,包括 API 密钥、令牌、密码和其他凭据。

何时使用此技能

  • 分享或开源仓库前进行清理
  • 从代码库中移除意外提交的机密
  • 将硬编码凭据替换为占位符
  • 审查仓库中的敏感信息
  • 为安全审查准备代码

推荐方法

阶段 1:全面发现

在进行任何更改之前,先完整列出所有敏感值。这样可以避免在处理过程中途发现更多机密这一常见问题。

常见机密模式:

类型模式/前缀示例
AWS 访问密钥AKIA[A-Z0-9]{16}AKIAIOSFODNN7EXAMPLE
AWS 秘密密钥40 位 Base64 字符串通常位于访问密钥附近
GitHub 令牌ghp_、gho_、ghs_、ghr_ghp_xxxxxxxxxxxx
Huggingface 令牌hf_hf_xxxxxxxxxxxx
通用 API 密钥api[_-]?key、apikey不固定
Bearer 令牌bearer、token不固定
私钥-----BEGIN.*PRIVATE KEY-----RSA/EC 密钥
数据库 URLpostgres://、mysql://、mongodb://连接字符串
密码字段password、passwd、pwd不固定

发现策略:

  1. 使用正则表达式搜索已知前缀和模式
  2. 搜索常见变量名(API_KEY、SECRET、TOKEN、PASSWORD、CREDENTIAL)
  3. 检查配置文件(.env、config.*、settings.*、*.json、*.yaml、*.yml)
  4. 检查测试固件和模拟数据文件
  5. 检查嵌入在其他格式中的数据(字符串中编码的 JSON、Base64 编码内容)

需要检查的重要位置:

  • 配置文件和环境模板
  • 测试固件和示例数据
  • 文档和 README 文件
  • CI/CD 配置文件
  • Docker 和部署配置
  • JSON/YAML 数据文件(机密可能嵌入结构化数据中)
  • 仓库中保存的 Git diff 输出或补丁文件
阶段 2:记录清单

进行更改前,创建一份记录清单,列出:

  1. 找到的每个唯一敏感值
  2. 每个值出现的所有文件位置
  3. 要匹配的确切字符串(必要时包含周边上下文,以确保唯一性)
  4. 要用于替换的占位符

占位符约定:

  • 使用能表明类型的描述性占位符:<AWS_ACCESS_KEY>、<GITHUB_TOKEN>、<DATABASE_PASSWORD>
  • 确保所有替换内容一致
  • 如果用户指定了格式,则按该格式操作
阶段 3:系统性替换

有条理地执行替换:

  1. 按清单逐个处理机密
  2. 对每个机密,替换所有文件中的所有出现位置
  3. 每次替换后立即验证
  4. 使用精确字符串匹配,避免意外修改

替换最佳实践:

  • 编辑前先读取文件,确保精确匹配字符串
  • 精确处理空白和格式
  • 考虑嵌入在 JSON 或其他结构化格式中的机密(可能需要转义)
  • 同一文件中同一个值多次出现时,可进行批量替换
阶段 4:验证

完成所有替换后:

  1. 重新运行所有原始发现搜索,确认不再有机密残留
  2. 搜索敏感值的部分匹配
  3. 运行提供的测试套件,验证清理效果
  4. 检查占位符格式是否正确

常见陷阱

1. 初始发现不完整

问题: 在替换过程中逐步发现机密,导致需要回头处理。

预防: 在开始时投入时间,使用多种模式进行全面搜索,并检查所有文件类型,包括数据文件和嵌入内容。

2. 意外位置中的机密信息

问题: 机密信息可能出现在 JSON 文件、嵌入的字符串、测试样例或编码数据中,无法通过简单搜索找到。

预防措施: 递归搜索所有文件类型。特别检查 JSON 和 YAML 文件。查找可能包含机密信息的 Base64 编码内容。

3. 精确字符串匹配失败

问题: 空白差异或字符编码问题会导致编辑操作失败。

预防措施: 务必先读取目标文件,了解确切的格式。完全按照文件中的内容复制字符串,包括空白字符。

4. 遗漏匹配项

问题: 同一机密信息出现多次,但只替换了部分内容。

预防措施: 每次替换后,立即搜索原始值进行确认。如果有可用的全部替换功能,请使用该功能。

5. Git 历史记录注意事项

问题: 从当前文件中移除机密信息后,Git 历史记录中仍会保留这些信息。

预防措施: 向用户确认是否需要清理 Git 历史记录。如果需要,可能要使用 git filter-branch 或 BFG Repo-Cleaner 等工具(这是另一项更复杂的操作)。

6. 对工具可用性的假设

问题: 并非所有环境都提供专用搜索工具(如 ripgrep)。

预防措施: 准备好备用方案。标准的 grep -r 在大多数环境中都可用。依赖某个工具前,请先确认它是否可用。

验证清单

在确认任务完成前:

  • 已搜索所有已知的机密信息模式
  • 已检查配置文件
  • 已检查 JSON/YAML 数据文件
  • 已审查测试样例和模拟数据
  • 已在所有位置替换每一项已识别的机密信息
  • 验证搜索确认原始机密信息均已移除
  • 占位符格式一致
  • 所有提供的测试均已成功通过

搜索命令参考

标准 grep(广泛可用):

# Search for AWS access keys
grep -rn "AKIA[A-Z0-9]\{16\}" . --exclude-dir=.git

# Search for common token prefixes
grep -rn "ghp_\|gho_\|ghs_\|hf_" . --exclude-dir=.git

# Search for password-related strings
grep -rn -i "password\|passwd\|pwd" . --exclude-dir=.git

# Search for API key patterns
grep -rn -i "api[_-]\?key\|apikey" . --exclude-dir=.git

搜索时务必排除 .git 目录,以免 Git 内部文件造成干扰。

评论

支持 Markdown