AI Native 手册
坑库

agent 读得到的凭证,就当已经暴露

模型拒绝和输出脱敏都靠不住。防止把明文凭证留在 agent 够得着的地方,尤其是开着免确认模式时

亲历小工具产品组织阶段 · 通用依据 · 2026-10 工作记录更新于 2026-10-30
分享到 X
一句话规则

agent 能读到的凭证按已暴露处理,模型自觉和脱敏都不算防线

发生了什么

具体经过不公开,这里只写我确认过的三点:

  • 模型的拒绝不稳定。同一类“读取并贴出凭证”的指令,有的模型一次都没拒绝,有的拒绝过几次,但都不是每次都拒绝。这点观察不足以给模型排名,但足以说明不能把防线押在这里
  • 脱敏只认明文。匹配明文的输出脱敏,会被按宽度折行、base64、十六进制和 diff 绕过去
  • 明文配置是跳板。工具配置文件里的明文 token 一旦被读走,就能拿去访问下一处资源

为什么会这样

模型的判断是概率性的,提示词也可能被它读到的内容影响。权限规则匹配的是命令文本,能拦住 agent 通常的写法,不是程序级的安全边界(见权限规则)。脱敏发生在内容已经读出来之后,只要编码方式变了,规则就匹配不上。

所以真正起作用的,是让凭证根本不在 agent 够得着的地方,或者让它拿到的权限本来就小。

怎么做

先盘点明文。配置文件、备份文件、shell 历史里都可能有,检查命令见密钥与配置。

把凭证移出文件。放进系统钥匙串,用的时候再取,做法见密钥与配置。

业界做法 用沙箱屏蔽凭证。Claude Code 的沙箱可以挡住 Bash 读取指定文件和环境变量(官方 schema 标注 v2.1.187 起,截至 2026-10)。我还没有长期用过。下面是 ~/.claude/settings.json 的片段,路径和变量名按你的环境改;屏蔽 ~/.ssh 后,走 SSH 的 git 操作要另想办法:

{
  "sandbox": {
    "enabled": true,
    "credentials": {
      "files": [
        { "path": "~/.aws", "mode": "deny" },
        { "path": "~/.ssh", "mode": "deny" }
      ],
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" }
      ]
    }
  }
}

token 只给最小权限。能只读就只读,能限定仓库就限定仓库,能设过期时间就设。

不可信内容、免确认、明文凭证,三样不同时出现。处理网页、邮件、别人提交的任务时,不开免确认模式,也不在存着凭证的机器上跑。

相关

本页目录