你只是嫌它问得烦。
Claude Code 要跑一条连数据库的命令,弹出授权框,你顺手点了「Yes, and don’t ask again」。下次它不再问,你省了三秒。

代价是:那条命令连同里面的明文密码,会被当成一条长期生效的权限规则,原样写进项目目录下的 `.claude/settings.local.json`。严格说它存下来的是「你批准过的规则」——批准的是一整条带密码的命令,密码就跟着原文进文件;批准的是带通配的模式,存下来的才是模式。36氪微博
这不是猜测。安全公司 Apiiro 扫了公开 GitHub 上的 104,185 份 `settings.local.json`,其中 1,122 份明文存着真实凭证,共计 1,379 条;算上历史提交、共享配置和 agent 对话记录,一共 2,539 条真实凭据,散落在 1,994 个仓库,牵出 63 家组织。36氪微博

四天后,GitGuardian 给出更大的口径:2025 年 1 月到 2026 年 11 月 7 日,公开 GitHub 上有 23,276 个仓库带着这个文件,累计识别出 31,088 条不同凭证,其中 5,343 条在被发现时仍然有效。36氪
为什么 .gitignore 没兜住
Anthropic 不是没想过这事。官方文档写明 `settings.local.json` 属于个人本地配置,不该提交进仓库;Claude Code 第一次创建它时,会自动把它加进 Git 的全局忽略规则。可全局规则跟着你这台机器走,不跟着项目走——换机、后建仓、或者文件已经被 Git 跟踪,它照样会进公开 GitHub。更麻烦的是,有些情况下是 Claude Code 自己动手,把带密码的配置提交上去的。微博36氪

官方回应,以及回应的边界
这事被摆上台面是 11 月 9 日:Ars Technica 记者 Kyle Orland 发文指出,Claude Code 正在把部分开发者的敏感凭据意外暴露到公开的 GitHub 仓库中,官方回应称正在修复。IT之家Ars Technica
其实早在 2025 年 8 月,就有开发者在 Claude Code 的 GitHub Issue 里报过同样的问题:批准含凭证的命令时,敏感信息会以明文写进配置文件,但这些反馈最终都因长期无人更新被自动关闭。直到这次安全研究公开,Claude Code 团队负责人 Boris Cherny 才在 Hacker News 上承认,这个工具历史上确实没有内置敏感信息清理机制,同时建议开发者改用 Auto Mode,让分类器自动处理常规授权请求。36氪

当场就有人反驳:Auto Mode 下批准敏感命令,内容照样会写进配置文件。Cherny 认可了这个反馈,表示在考虑改进;同时提到团队想把基础的 Secret Scanning 直接集成进 Claude Code,目前还在研究和原型验证阶段。顺带提醒一句,别太信现成工具——Apiiro 测出 gitleaks 和 TruffleHog 一起用,仍然漏掉 215 个含真实凭证的文件,占相关文件的 19.2%。36氪
现在能做的五件事
第一,打开项目里的 `.claude/settings.local.json`,搜一遍有没有密码、Token、数据库连接串。
第二,在项目自己的 `.gitignore` 里明确写上 `.claude/settings.local.json`,别只依赖全局规则;还要打 Docker 镜像的,在 `.dockerignore` 里排掉 `.claude/`。
第三,已经推到公开仓库的,删文件不算完——Git 历史、fork 仓库、已发布的镜像里都还留着,先撤销并轮换所有暴露过的密钥,再去清理历史。36氪Ars Technica
第四,命令里要用密钥,走环境变量引用,别把明文直接写进参数;授权时尽量用模式匹配,别批准一整条精确命令。
第五,顺手升级:2.1.321 修复了 MCP OAuth 在服务器重定向时,可能把 refresh token 这类密钥发到另一台主机的问题,用 `claude --version` 核对一下版本。微博微博
AI 编程工具的卖点是「少操心」。可当一个授权选项能顺手把你的家底打包上传,这份省心就还差一层保险——在厂商补上之前,这层保险只能你自己系。