文章详情

点过Claude Code的“不再询问”?1122份公开授权文件里发现了密码和密钥

一句话看懂

用 Claude Code 跑带密码的命令时如果点了「Yes, and don’t ask again」,整条命令连同里面的密码会被原样写进项目授权文件;一旦随代码推上公开仓库,密钥就会直接暴露。

安全公司 Apiiro 在 11 月 1 日至 3 日扫描了 GitHub 公开仓库的默认分支,在查到的 `.claude/settings.local.json` 文件里,发现 1122 个文件带着符合厂商格式或指向公网主机的数据库密码与 API 令牌(研究只做只读采集,没有拿这些凭据登录验证,其中一家公司确认其密钥曾有效)。你平时乖乖把密码放在不上传的本地配置里,怎么会跑到公开仓库去?问题就出在让 AI 替你跑命令时点的那个「不再询问」上。

图片来源:截图自 Apiiro 研究报告,11月8日

点下「不再询问」,AI 会把整条命令连密码一起抄进本子

平时让 Claude Code 连数据库或者调外部接口,它会先去读你本地配置里的密码或令牌,拼成一条完整的执行命令,然后弹窗问你能不能跑。这时候如果你嫌烦,点了「Yes, and don’t ask again」(同意且不再询问),按照 Anthropic 官方文档的机制,Claude Code 会把这条命令存进项目目录下的 `.claude/settings.local.json` 文件里,放进允许执行的 `allow` 列表。

这就好比你让管家去开信箱,把钥匙递给他,结果他为了记住「下次不用再请示也能开这个信箱」,直接把钥匙的齿痕拓在门口的备忘录上了。AI 记白名单时不会自动把命令里的密码抠掉,而是把整条带密码的命令原封不动存了进去。只要这个文件跟着项目代码一起提交到了公开仓库,密码就彻底公开了。

官方加了防上传保护,换电脑后仍要检查

看到这你可能会纳闷:既然这个文件这么敏感,官方难道没做防上传保护吗?

Anthropic 其实做了。当 Claude Code 在一个 Git 仓库里首次写入 `.claude/settings.local.json` 时,会自动在你当前这台电脑的「全局 Git 忽略文件」里加上一条规则,让 Git 别管这个文件。

图片来源:截图自 Anthropic 官方设置文档,11月8日

但「记在这台电脑上」和「跟着项目走」是两码事。本机的全局忽略规则不会装进项目文件夹里带给别人,Apiiro 就指出了好几个容易踩中的空当:

  • 你先让 Claude Code 建了配置目录、后面才把这个文件夹初始化成 Git 仓库;或者这个文件是你手动创建的,还没经过 Claude Code 首次写入;
  • 你换了一台新电脑把项目克隆下来,或者团队同事拉取了代码,他们电脑上可没有那条全局忽略规则;
  • 在忽略规则生效前,这个文件就已经被 Git 盯上(追踪)了。

在这些情况下,提交代码前就得检查,这个藏着密码的本地授权文件是否会被一起传上 GitHub。

现在打开项目查这两处,已经传上去的先换密码再删文件

如果你平时也爱点「不再询问」,现在就可以按下面的顺序排查和补救:

  1. 先翻本地的授权文件:打开项目里的 `.claude/settings.local.json`,如果团队有共享配置,把 `.claude/settings.json` 也打开。看里面的 `allow` 列表里,有没有夹着真实数据库密码、API 令牌的完整命令。如果列表里只是一般的运行或测试命令、不含秘密,那就不用紧张。
  2. 查它有没有上过 GitHub:看看这个文件现在是不是已经被 Git 追踪,再去公开仓库的当前文件列表和历史提交记录里搜一搜它有没有出现过。
  3. 一旦公开过,先作废密码,再清理仓库:只要密码在公开仓库里露过面,哪怕你马上删掉文件重交一版,原来的密码依然会留在提交历史、别人的克隆、fork 分支和缓存里。按照 GitHub 官方和 Apiiro 的建议,第一步永远是去后台把泄露的密码或令牌撤销、换成新的;改完密码之后,再和团队协调清理仓库历史。
  4. 把保护写进项目里:在项目自己的 `.gitignore` 文件里加上 `.claude/settings.local.json`,如果这个文件已经被 Git 追踪了,先取消追踪,让忽略规则跟着项目走。

平时用 Claude Code 干活不用因噎废食,要改的只是喂命令的方式:让命令去读取环境变量的名字(比如 `$DB_PASSWORD`),别把密码明文直接拼在命令行里;点「不再询问」保存授权时,也只对通用的命令模式放行,别把带着密码真身的整条命令直接存进白名单。

出处(3)
  1. Coding Agents Copy Your Secrets to a Hidden File. Thousands Are on GitHub · Apiiro
  2. Settings files and precedence · Anthropic
  3. Removing sensitive data from a repository · GitHub

内容有误?告诉我们,核实后会更正,并在这里写明改了什么。

评论

还没有人评论,来写第一条。

发表评论

编辑器加载中…
点过Claude Code的“不再询问”?1122份公开授权文件里发现了密码和密钥 | 模真真