Reed's News
← 返回精选

Claude Code在请求中隐写添加标记

AI 65 kirushik 2026/6/30 717 字 原文 ↗

我出于隐私考量对Claude Code展开了检查。

如今多数开发者会给代码助手开放权限,包括文件系统、Shell、Git、浏览器,甚至完整的系统操作权限——这其实是必要的,毕竟助手需要足够上下文才能完成有价值的工作。

但这也意味着,代码助手的客户端本身值得被审视:既然编码代理能读取你的代码仓库、执行系统命令,那承载它的程序本身就该足够"安分"(比如pi harness这类轻量工具)。

于是我查看了本地安装的Claude Code(版本2.1.196)。

在Claude Code的程序文件中,我发现一个函数会修改插入到系统提示词中的当前日期字符串。

正常的日期字符串格式如下:

text

Claude Code会悄悄修改两处内容:

  • Today's中的撇号
  • 日期分隔符,从-改为/

以下是从混淆代码中还原整理出的相关代码:

js

这属于提示词隐写术——一种将数据隐藏在公开内容中的技术。

表面上看,句子还是正常的日期表述,大模型和用户都会觉得毫无异常,但原始请求中却暗藏了标记。

js

触发这一机制的是ANTHROPIC_BASE_URL,也就是Claude Code的API基础地址覆盖参数。随后程序会检查三个条件:

  • 系统时区是否为Asia/ShanghaiAsia/Urumqi
  • API基础地址的主机名是否匹配解码后的域名列表
  • 主机名是否包含特定AI实验室关键词

若时区检查触发,日期格式会从:

text

变为:

text

主机名检查则会修改撇号:

条件 撇号字符
正常状态 '
匹配已知域名 \u2019
包含实验室关键词 \u02BC
同时匹配域名与关键词 \u02B9

这些字符差异极小,在大多数等宽字体下几乎无法察觉。

域名和关键词列表以Base64字符串存储,需用密钥91进行异或解码:

js

解码后的实验室关键词列表为:

text

解码后的域名列表则庞大得多,包含中国企业域名、AI公司域名,以及大量代理/经销商/网关域名。

部分示例如下:

text

这个日期函数会在构建代理上下文时被调用:

js

因此,这个标记会成为发送给大模型的系统上下文的一部分(Anthropic很可能在后端对其进行解析)。

我安装的程序文件带有Anthropic的数字签名:

text

我当前Shell环境中未设置ANTHROPIC_BASE_URL,时区为:text

所以在我的机器和当前环境下,日期字符串会保持正常格式:撇号为普通样式,日期采用YYYY-MM-DD格式。

Anthropic此举大概率是为了检测API经销商、未授权的Claude Code网关,以及模型"蒸馏攻击"流水线。指向已知经销商域名的自定义ANTHROPIC_BASE_URL是一个有效信号,主机名中包含deepseekzhipu等关键词也是如此。

这个出发点合理,但实现方式却很诡异。

Claude Code悄悄用几乎不可见的Unicode标记修改系统提示词,将代理/网关的分类信息编码进看似普通的英文句子,还把域名列表藏在异或加密和Base64编码背后。这算不上恶意功能,但对于一款需要用户信任的开发者工具而言,实在是个奇怪的选择。

编码代理本身就处于一道危险的边界:它们能读取代码、意外泄露机密、执行命令、安装包、编辑文件,还能在你的本地机器上推送提交。多数开发者之所以接受这些风险,是因为生产力提升的价值超过了潜在威胁。而开发者的信任,恰恰建立在工具"安分守己"的表现上。

如果客户端想要检测自定义API网关,完全可以开诚布公:添加一个明确的遥测字段并附上文档说明,公开相关策略,或者在版本更新日志中告知用户。

把检测信号藏在提示词里,只会让其他所有隐私承诺都变得难以信服。

对大多数用户而言,这个机制可能永远不会被触发:

  • 如果你使用官方Anthropic API端点,Crt()函数会提前返回;
  • 如果你未设置ANTHROPIC_BASE_URLCrt()函数也会提前返回;
  • 常规使用场景下,日期提示词会保持"安分"的状态。

真正会触发机制的,是那些通过自定义基础地址使用Claude Code的用户,包括:

  • 企业内部网关用户
  • 本地代理用户
  • 模型路由用户
  • API经销商
  • 研究场景用户

此时Claude Code会对主机名进行分类,并将结果编码进提示词。

但绕过这个机制也易如反掌:修改主机名、切换时区、打程序补丁、包装进程——任何有经验的攻击者都能让这个检测信号彻底失效。

如此一来,这个功能惩罚的反而是那些最容易被识别的群体:做着非常规但合法操作的普通开发者。

我认为这件事本可以做得更透明。

开发者工具可以明确执行使用条款,API提供商可以检测滥用行为,企业也有办法保护自己的模型。但当一款拥有文件系统和Shell访问权限的工具,开始把分类信息藏在看不见的提示词标点中时,用户的合理反应就是保持警惕。

信任,从来都是在那些"安分守己"的细节中建立起来的。