我构建了一个 git pre-push hook,它使用 LLM 在你的差异中扫描秘密,确保它们在离开你的机器之前就被发现。 它的工作原理如下 🧵
当你运行 git push 时,钩子会首先触发。它会弄清楚有什么新内容——要么是新分支上的所有提交,要么是现有分支上的新提交——并生成一个 git diff,准确显示即将推送的内容。
该差异通过严格限制的提示发送到 Kimi CLI。模型被指示必须准确地响应以下两个字符串之一:SAFE_TO_PUSH 或 BLOCK_PUSH。
它扫描常见的嫌疑对象: - API 密钥(OpenAI、Anthropic、AWS…) - 密码和认证令牌 - 私钥(SSH、SSL、JWT 秘密) - 带凭据的数据库连接字符串 - 意外提交的 .env 文件
如果返回 BLOCK_PUSH,钩子将退出 1 — 推送被拒绝,您将看到确切触发它的行,以及严重性评级。 修复它,然后再次推送。
在这里使用 LLM 而不是正则表达式的好处是:它理解上下文。一个针对 "sk-" 的正则表达式可以捕捉到 OpenAI 密钥,但会错过一个名为 PROD_SECRET 的自定义内部令牌。模型可以捕捉到两者。
340