Claude Code在请求中隐写添加标记
我出于隐私考量对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/Shanghai或Asia/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是一个有效信号,主机名中包含deepseek或zhipu等关键词也是如此。
这个出发点合理,但实现方式却很诡异。
Claude Code悄悄用几乎不可见的Unicode标记修改系统提示词,将代理/网关的分类信息编码进看似普通的英文句子,还把域名列表藏在异或加密和Base64编码背后。这算不上恶意功能,但对于一款需要用户信任的开发者工具而言,实在是个奇怪的选择。
编码代理本身就处于一道危险的边界:它们能读取代码、意外泄露机密、执行命令、安装包、编辑文件,还能在你的本地机器上推送提交。多数开发者之所以接受这些风险,是因为生产力提升的价值超过了潜在威胁。而开发者的信任,恰恰建立在工具"安分守己"的表现上。
如果客户端想要检测自定义API网关,完全可以开诚布公:添加一个明确的遥测字段并附上文档说明,公开相关策略,或者在版本更新日志中告知用户。
把检测信号藏在提示词里,只会让其他所有隐私承诺都变得难以信服。
对大多数用户而言,这个机制可能永远不会被触发:
- 如果你使用官方Anthropic API端点,
Crt()函数会提前返回; - 如果你未设置
ANTHROPIC_BASE_URL,Crt()函数也会提前返回; - 常规使用场景下,日期提示词会保持"安分"的状态。
真正会触发机制的,是那些通过自定义基础地址使用Claude Code的用户,包括:
- 企业内部网关用户
- 本地代理用户
- 模型路由用户
- API经销商
- 研究场景用户
此时Claude Code会对主机名进行分类,并将结果编码进提示词。
但绕过这个机制也易如反掌:修改主机名、切换时区、打程序补丁、包装进程——任何有经验的攻击者都能让这个检测信号彻底失效。
如此一来,这个功能惩罚的反而是那些最容易被识别的群体:做着非常规但合法操作的普通开发者。
我认为这件事本可以做得更透明。
开发者工具可以明确执行使用条款,API提供商可以检测滥用行为,企业也有办法保护自己的模型。但当一款拥有文件系统和Shell访问权限的工具,开始把分类信息藏在看不见的提示词标点中时,用户的合理反应就是保持警惕。
信任,从来都是在那些"安分守己"的细节中建立起来的。