日志脱敏加固:密钥名带隐形字符也能挡住
日志和会话转录里本该打码的密钥,有时因为密钥名里夹了零宽空格(ZWS)之类不可见字符,匹配规则失效,明文就漏出去了。CLI 2.1.286 把这条洞补上:即使 key 名带隐形字符,脱敏仍会按密钥处理,避免靠「肉眼看不见的字符」绕过打码。
这是发布说明里和「权限计数」「模型拒绝重试」并列的第三条安全向高亮,值得单独看一眼。
修了哪些泄漏面
changelog 里与脱敏 / 凭据展示相关的修复包括(以 2.1.286 为准):
- 密钥名含不可见字符(如零宽空格)时,日志与转录仍打码。
- URL 里的密码含
)、引号、]、&、第二个@,或延伸到/之后、以及sshURL 里[::1]一类括号主机时,不再只打码半截。 - MCP 错误信息在
Bearer/Basic出现在 key 名前面时,不再把凭据值直接印出来。 - 百分号编码的 Bearer token 原先可能只遮一部分,现已修。
/feedback打到磁盘的 zip 里,会话转录在脱敏后出现非法 JSON 行的问题已修——提交反馈包时更不易带着坏行或半脱敏内容。
另外,同版本还有安全向改动:域名安全检查被限流时,WebFetch 错误会告诉模型不要死循环重试——减少无效外呼与噪音,和「别把密钥打进日志」是不同角度。
为什么「隐形字符」危险
攻击或误配不必改密钥值本身,只要让环境变量名 / header 名看起来像 API_KEY,中间却插了 ZWS,旧规则就可能当「不是密钥字段」放过。肉眼复制粘贴也看不出来。加固后,这类绕过不再轻易得逞。
这不意味着你可以:
- 把生产密钥写进会进日志的调试输出;
- 把完整
.env贴进公开 issue; - 假设「脱敏了 = 可以随便分享整份 transcript」。
脱敏是最后一道闸,不是许可把秘密放进会话。
团队落地建议
- 尽快升到 ≥ 2.1.286,尤其是会开
/feedback、会把日志送到集中平台、或大量接 MCP 的环境。 - 抽查旧日志:若曾怀疑泄漏,按 key 名变体、URL 密码、Bearer 前缀再搜一轮。
- MCP / 网关错误:升级后复现一次鉴权失败,确认错误文案不再带明文 token。
- 反馈包:用
/feedback生成 zip 前,仍按公司规定审查;修好 JSON 行不等于可以对外公开。 - 与 关掉 WebFetch、allowedProviders 等策略叠用:少外呼、少通道、少明文,三层一起收。
小结
- 2.1.286 加固日志 / 转录脱敏:密钥名带不可见字符也会打码。
- 同步修了 URL 密码截断、Bearer/Basic 误展示、百分号编码 token、
/feedbackzip 转录等边角。 - 脱敏是兜底;密钥仍应少进会话、少进日志、少进反馈包。
安全向版本建议优先升级,并在集中日志里做一次「升级前后」抽样对比。