Skip to content

日志脱敏加固:密钥名带隐形字符也能挡住 ​

日志和会话转录里本该打码的密钥,有时因为密钥名里夹了零宽空格(ZWS)之类不可见字符,匹配规则失效,明文就漏出去了。CLI 2.1.286 把这条洞补上:即使 key 名带隐形字符,脱敏仍会按密钥处理,避免靠「肉眼看不见的字符」绕过打码。

这是发布说明里和「权限计数」「模型拒绝重试」并列的第三条安全向高亮,值得单独看一眼。

修了哪些泄漏面 ​

changelog 里与脱敏 / 凭据展示相关的修复包括(以 2.1.286 为准):

  1. 密钥名含不可见字符(如零宽空格)时,日志与转录仍打码。
  2. URL 里的密码含 )、引号、]、&、第二个 @,或延伸到 / 之后、以及 ssh URL 里 [::1] 一类括号主机时,不再只打码半截。
  3. MCP 错误信息在 Bearer / Basic 出现在 key 名前面时,不再把凭据值直接印出来。
  4. 百分号编码的 Bearer token 原先可能只遮一部分,现已修。
  5. /feedback 打到磁盘的 zip 里,会话转录在脱敏后出现非法 JSON 行的问题已修——提交反馈包时更不易带着坏行或半脱敏内容。

另外,同版本还有安全向改动:域名安全检查被限流时,WebFetch 错误会告诉模型不要死循环重试——减少无效外呼与噪音,和「别把密钥打进日志」是不同角度。

为什么「隐形字符」危险 ​

攻击或误配不必改密钥值本身,只要让环境变量名 / header 名看起来像 API_KEY,中间却插了 ZWS,旧规则就可能当「不是密钥字段」放过。肉眼复制粘贴也看不出来。加固后,这类绕过不再轻易得逞。

这不意味着你可以:

  • 把生产密钥写进会进日志的调试输出;
  • 把完整 .env 贴进公开 issue;
  • 假设「脱敏了 = 可以随便分享整份 transcript」。

脱敏是最后一道闸,不是许可把秘密放进会话。

团队落地建议 ​

  1. 尽快升到 ≥ 2.1.286,尤其是会开 /feedback、会把日志送到集中平台、或大量接 MCP 的环境。
  2. 抽查旧日志:若曾怀疑泄漏,按 key 名变体、URL 密码、Bearer 前缀再搜一轮。
  3. MCP / 网关错误:升级后复现一次鉴权失败,确认错误文案不再带明文 token。
  4. 反馈包:用 /feedback 生成 zip 前,仍按公司规定审查;修好 JSON 行不等于可以对外公开。
  5. 与 关掉 WebFetch、allowedProviders 等策略叠用:少外呼、少通道、少明文,三层一起收。

小结 ​

  • 2.1.286 加固日志 / 转录脱敏:密钥名带不可见字符也会打码。
  • 同步修了 URL 密码截断、Bearer/Basic 误展示、百分号编码 token、/feedback zip 转录等边角。
  • 脱敏是兜底;密钥仍应少进会话、少进日志、少进反馈包。

安全向版本建议优先升级,并在集中日志里做一次「升级前后」抽样对比。

Claude-cn.org,专注于 Claude Code 中文教程