用Claude Code点过“不再询问”?先查这个本地授权文件
源码干干净净还不够,你还得去查项目文件夹里的本机授权记录 `.claude/settings.local.json` 和 Git 历史。你点下允许并勾选“不再询问”时,带密码的整条命令可能已经被原封不动存进了这个文件,跟着代码一起传上了网。
用 Claude Code 辅助写代码时,如果让它执行一条带有密码、令牌或数据库连接串的终端命令,并顺手点了“Yes, and don't ask again”(允许且不再询问),密码就已经落盘了。安全机构 Apiiro 在 11 月 5 日发布的研究里指出了这个盲区:Claude Code 为了记住你的授权,会把获准执行的整条命令写进项目目录的 `.claude/settings.local.json` 授权规则里。哪怕你的业务代码里一个字都没写密码,只要这个本机文件被 Git 追踪并推送到公开仓库,密钥就跟着公开了。Apiiro 检查了超过 10 万份公开的 `settings.local.json` 以及相关的 Git 历史、共享设置和对话记录,一共在 1994 个仓库里筛出了 2539 项符合服务商格式或关联了公网地址的凭据。研究没有用这些凭据尝试登录。
全局忽略拦不住换电脑和后建仓库
你可能会奇怪,这种带 `.local` 后缀的本机配置文件,工具难道不会自动拦住吗?
Claude Code 在 Git 仓库里创建它时,确实会把它加进开发者的本机全局忽略规则里。但这个保护有好几个漏口:本机全局忽略不会跟着代码仓库同步到另一台电脑上,你换台设备提交代码就可能把它带出去;如果你是在普通文件夹里先用了 Claude Code,后来才把这个文件夹初始化成 Git 仓库,或者这个文件在忽略规则生效前已经被 Git 追踪过,后续修改照样会被提交上去。
Claude Code 负责人 Boris Cherny 11 月 7 日在 Hacker News 回应称,工具过去确实没有自动擦除命令里的敏感信息,目前团队还在探索用自动模式识别和内置基础扫描来拦截,这次回应未给出已修复版本号。
已经传上网的先换密码,留在本地的改掉命令习惯
按研究给出的自查办法,经常把代码推上 GitHub 的开发者现在就得自己动手查两个地方:打开本机项目的 `.claude/settings.local.json`(以及团队共享的 `.claude/settings.json`),看里面的 `allow` 列表有没有明文密码、令牌和连接串;再去公开仓库和 Git 提交历史里搜这两个文件是否出现过。自查时千万别把文件内容贴进公共检测网站、评论区或截图发出来。
查出问题后,根据文件有没有公开过,处理顺序完全不同:
- 文件或历史记录已经推上过公开仓库:第一步是立刻去对应的服务商后台撤销、更换那把已经外泄的密钥,第二步才是清理文件和 Git 历史。只把当前目录里的文件删掉没用,老的提交历史、别人的 fork 和克隆副本里还留着原来的钥匙。
- 只在自己电脑上、从没提交过:直接把本机 `settings.local.json` 里带密钥的旧授权规则删掉即可。
为了防止下次手滑,顺手把 `.claude/settings.local.json` 从版本控制里取消追踪,直接写进项目自己的 `.gitignore` 文件里(团队共享的 `settings.json` 如果不包含敏感信息可以保留)。平时让 Claude Code 跑命令时,别把密钥明文塞进命令行,改成从安全存储里用环境变量调用,并在提交代码前开启包含历史记录的密钥扫描。
出处(3)
内容有误?告诉我们,核实后会更正,并在这里写明改了什么。
评论
还没有人评论,来写第一条。
发表评论