刷到 Apiiro 一篇挺扎心的研究:Claude Code 里点「Yes, and don't ask again」,它会把你批准过的整条命令原样写进项目文件 .claude/settings.local.json——密码和 API key 也明文躺进去。

他们翻了公开 GitHub,扫到约 10.42 万份这个文件(约 10.36 万个仓库),其中 1122 份(约 1.1%)至少含一把密钥,合计 1379 个不同密钥。把 git 历史、团队共享的 settings.json 和 agent 对话记录也算上,一共约 2539 个密钥,散落在 1994 个仓库。

超过三分之一能直接开数据库,光数据库密码就有 379 个;还有 43 个对着公网服务器的 SSH 登录、42 个 GitHub/GitLab/npm token、23 个 AWS key,涉及约 63 家机构。研究员没拿这些密钥去试能不能用,但通知过的一家公司确认,那把钥匙当时还是活的。

Claude Code 会把这个文件加进你本机的全局 git excludes,却不会写进项目自己的 .gitignore——换电脑,或者文件已经被提交,保护就失效了。他们追踪的 1105 个仓库里,有 539 个是 Claude 作为 co-author 改过这个文件。对比了 16 款编程 agent,目前只有 Claude Code 被确认会默认把完整批准命令存进项目文件。

研究员建议:先轮换文件里出现过的所有密钥,再清理仓库。图省事点「不再询问」,密钥就这么被写进明文配置了。
#ClaudeCode #网络安全 #AI