一、开篇:一篇文章引发的千层浪
2026 年 6 月 30 日,一名开发者在个人博客 thereallo.dev 上发表了一篇题为《Claude Code Is Steganographically Marking Requests》的文章。字数不多,技术分析却极为扎实——他反编译了 Claude Code 2.1.196 版本的 JavaScript 代码,逐行展示了其中一套隐蔽的分类标记系统。
文章的发现可以浓缩为一句话:Claude Code 在不告知用户的情况下,根据 API 基址和系统时区,将请求来源分类结果通过不可见的 Unicode 字符编码进系统提示词中。
这篇文章迅速被转载至 Hacker News,在短短几小时内冲上首页榜首,最终获得 2444 个点赞。评论区汇聚了硅谷最资深的工程师、安全研究者、AI 创业者以及法律专家,讨论覆盖了从技术实现到商业伦理、从 IP 法律到 AI 地缘政治的全光谱。
这不是 Claude Code 第一次引发信任危机——今年 3 月,Anthropic 因人为失误将 51 万行 Claude Code 内部源码泄露到了 npm 包,此次发现的隐写代码正是社区从那次泄露的源码中挖出来的。但这一次,它触及了一个比代码质量更根本的问题:当一个拥有你电脑全部权限的工具,开始用你看不见的方式做你看不懂的事情,信任还能建立在什么之上?
二、技术解剖:隐写标记是怎么工作的
2.1 一个看似普通的日期字符串
让我们先看问题的核心。当 Claude Code 构建发给模型的系统提示词时,它会插入一句普通的日期声明:
Today's date is 2026-06-30.这是一句人畜无害的话。人类用户看到它,模型也看到它,一切都很正常。
但 Claude Code 有能力悄悄改变这句话中的两个部分:
- 撇号字符:
Today's中的' - 日期分隔符:从
-换成/
这两个改动对人的肉眼几乎不可见,但对机器却是一串清晰的信号。以下是研究者从解压后的 Claude Code 源码中提取出的核心逻辑:
function edp(known, labKw) { if (!known && !labKw) return "'"; if (known && !labKw) return "\u2019"; // 右单引号 if (!known && labKw) return "\u02BC"; // 修饰字母撇号 return "\u02B9"; // 修饰字母素数符号 }这四个字符——普通 ASCII 撇号'(U+0027)、右单引号'(U+2019)、修饰字母撇号ʼ(U+02BC)、修饰字母素数符号ʹ(U+02B9)——在大多数等宽字体里几乎无法区分。但你看到的是一句英文日期,模型拿到的却是一个经过了 4 种分类编码的信号。
2.2 三层检测机制
那么,什么情况下哪个字符会被使用?Claude Code 的检测逻辑分为三层:
第一层:API 基址检测
function Crt() { let baseUrl = process.env.ANTHROPIC_BASE_URL; if (!baseUrl) return true; // 未设置,跳过全部检测 return Rrt(baseUrl); } function Rrt(baseUrl) { try { let host = new URL(baseUrl).host; return ["api.anthropic.com"].includes(host); } catch { return false; } }逻辑很清晰:只有当ANTHROPIC_BASE_URL被设置为非官方端点(非api.anthropic.com)时,标记机制才会激活。使用官方 API 的普通用户完全不受影响。
第二层:时区检测
let cnTZ = timezone === "Asia/Shanghai" || timezone === "Asia/Urumqi";如果系统时区是中国时区,日期分隔符会从-变为/——2026-06-30变成2026/06/30。这是一个相对明显的信号,但同样只有仔细检查原始字节才能发现。
第三层:域名与关键词黑名单
这是最核心的检测层。Claude Code 内置了一份加密的域名和关键词列表,使用 base64 + XOR(密钥 91)编码存储。解码后的关键词列表包括:
deepseek, moonshot, minimax, xaminim, zhipu, bigmodel, baichuan, stepfun, 01ai, dashscope, volces域名列表更长,包含 147 个条目,涵盖:
- 中国顶级域名(
.cn) - 中国企业域名(
baidu.com、alibaba-inc.com、alipay.com、bytedance.net、kuaishou.com、xiaohongshu.com、jd.com、bilibili.co等) - 中国 AI 公司域名(
moonshot.ai、stepfun-inc.com、iflytek.com等) - API 代理/中转站域名(
anyrouter.top、claude-code-hub.app、claude-opus.top、openclaude.me、proxyai.com、yunwu.ai、zenmux.ai等)
当ANTHROPIC_BASE_URL指向的 hostname 命中这些列表时,对应的 Unicode 撇号就会被注入到系统提示词中。
2.3 标记如何随请求发送
关键问题不是"改了字符",而是这个被修改的日期去了哪里。研究者在源码中找到了调用链:
{ currentDate: Vla(GSe()) // 被标记的日期字符串 }这个被隐写标记修改过的日期字符串,会作为系统上下文的一部分随每一次API 请求发送给 Anthropic 的后端服务器。Anthropic 在后端拿到这个日期字符串后,可以通过检查 Unicode 字符来反推请求来源的分类结果。
整套机制的设计目标很明确:反滥用、反蒸馏、反非官方中转。但实现方式——用不可见的 Unicode 变体在用户不知情的情况下编码环境信息——却引发了巨大争议。
三、从发现到爆发:为什么这件事不是被"公开"的,而是被"挖"出来的
这里有一个重要的叙事转折:这套隐写标记机制从未被 Anthropic 主动披露。它既没有出现在 Release Notes 中,也没有出现在任何隐私政策或用户协议更新中。
它是怎么被发现的?答案要追溯到三个月前。
2026 年 3 月底,Anthropic 发生了一次严重的人为失误:将 51 万行 Claude Code 内部源码意外泄露到了 npm 包中。社区迅速 fork 并分析了这批源码。6 月 30 日,研究者在分析中定位到了这套隐写检测代码,随即发表了详细的技术拆解。
换句话说,如果不是三个月前的泄露事故,这套机制可能一直在运行,而用户完全不知情。这个时间线本身就构成了信任危机的核心——透明不是 Anthropic 的选择,而是事故的后果。
发现的过程也很讽刺。Anthropic 用 XOR + base64 来"混淆"域名列表,但这种级别的混淆在逆向工程面前形同虚设——任何有一定二进制分析经验的开发者都能在几分钟内解码。原帖作者自己也表示惊讶:
"我对他们做这件事的粗糙程度感到惊讶。他们本可以用同样的效果但降低被逆向工程发现的概率。这个领域叫 underhanded code……有更巧妙的方式实现类似目标。"
这段话在 HN 上收获了极高的赞同。它点出了一个尴尬的事实:如果连行业顶级 AI 公司写的客户端代码都这么粗糙,那 AI 驱动的"vibe coding"叙事该打多少折扣?
四、Anthropic 的回应:"这是一场实验"
事件发酵后,Claude Code 团队负责人 Thariq Shihipar 在社交平台 X 上公开回应:
"这是我们 3 月份启动的一项实验,目的是防止未经授权的转售商滥用账户,以及保护模型不被蒸馏。团队已经部署了更强的防护措施,并且合并了 PR,会在明天的版本中回滚这段代码。"
这段回应可以用四个字来概括:承认了,但不认错。
"实验"这个词在这里承担了很重的修辞负荷。关键的时间线事实是:代码从 3 月写入(源码泄露时的版本已包含),到 6 月 30 日被发现,运行了至少三个月。三个月的时间足够收集大量的用户环境数据。一个没有用户知情权、没有退出机制、没有文档说明的"实验",在严格意义上更接近"未披露的数据收集"。
更重要的是,"回滚"不等于"没发生过"。公告中没有说明这些标记数据已经被如何使用、存储在哪里、是否会删除。从合规角度看,在欧盟 GDPR 的管辖范围内,未经用户同意的隐写数据提取很可能构成违法——即使出于反滥用的目的。
五、HN 千评:社区四种声音的深层逻辑
HN 上的讨论之所以达到 2444 赞、超过 1000 条评论的量级,是因为这件事触及了多个维度,每个维度都激发了一个不同群体的核心关切。我们将社区反应归纳为四种立场,每种立场背后都有一套完整的逻辑链条。
5.1 务实派:「塑料猫头鹰」防御论
这是 HN 上最具影响力的辩护声音,核心比喻来自一条高赞评论:
"这就像院子里有鸟的问题所以你买了塑料猫头鹰。猫头鹰吓走了大部分鸟,但不是全部,所以你又买了超声波装置。但买了新装置并不意味着你会把猫头鹰撤掉——现在你有两层防御。"
这一派的核心观点是:
- 客户端隐写只是多层防御体系中的最表层,真正的检测逻辑在服务端
- 低成本的第一层过滤足以阻止大部分非技术性的代币倒卖者
- 每层防御单独看都不完美,但叠加起来形成有效的防护网
- 商业公司在保护自身利益时采取技术措施是正当的,不应被过度道德化
这一立场在工程师群体中获得了广泛认同,因为它建立在一个基本的工程直觉之上:安全是分层的,每层都要有。
5.2 技术派:实现太粗糙,但这暴露了更大的问题
技术派的关注点不在"该不该做",而在"为什么做得这么烂"。
- XOR + base64 混淆等同于明文。任何有能力的逆向工程师都能在几分钟内解码,这不是安全措施,这只是增加了一点点翻找的成本。
- 客户端检测本质上是不可靠的。绕过成本极低——改 hostname、改时区、patch 二进制文件、包一层进程代理——任何严肃的滥用者都能在几分钟内绕过。
- 真正惩罚的是谁?恰恰是那些做合法但非常规事情、又最容易留下指纹的普通开发者——通过企业合规网关路由的用户、使用内部代理的团队、在研发阶段接入自定义 API 基址的研究者。
- Anthropic 的代码质量也成了讨论焦点。多位评论者指出,这个粗糙的实现本身就令人怀疑 Claude Code 的整体工程质量——它是不是正在变成一段"vibe coded"产品?
一条高赞评论将这种讽刺性总结得很到位:
"如果 AI 原生工程领导者的客户端代码都写得这么懒,那关于 AI 编码能力的整个叙事,是不是该主动打个折了?"
5.3 伦理派:信任不是技术问题,是透明度问题
这一派的论述触及了事件最根本的紧张关系。
"他们为什么选择隐藏?"是核心追问。如果这真的只是一个合理的反滥用机制,为什么不写到文档里?为什么不在隐私政策中披露?为什么不用显式的遥测字段(telemetry field)而不是隐写的 Unicode 变体?
答案在伦理派看来不言自明:因为 Anthropic 知道,用户不会同意。一个能在文件系统级操作的客户端工具,如果公开声明"我们会检测你的网络环境和地理位置并编码进你的请求中",用户的反应不会是"合理",而是"这还不算间谍软件?"
由此引出一个更重要的原则:对于高权限工具,透明不是加分项,而是准入条件。
编程 agent 已经在使用一个极其危险的权限模型——它可以读取你的代码仓库、执行 Shell 命令、安装软件包、修改文件、推送 Git 提交。绝大多数开发者接受这种风险,是因为生产力提升值得,也是因为他们默认客户端的行为了解于掌握了。当一个客户端开始在你看不见的地方做你看不懂的事情,这个默认的前提就被动摇了。
一条被高度引用的评论将这个道理总结得极为精辟:
"信任是在最无聊的地方挣来的。一个看似无害的日期字符串偏偏不是它看起来的样子——这让人怎么相信客户端里其他看似无害的代码?"
5.4 法律和哲学派:IP 法律真空与 hypocrisy 悖论
这是讨论中最有学术深度的一层。其核心论点是一个令人不安的矛盾:
AI 公司在训练模型时主张「fair use」用于使用互联网上的版权材料;但当别人试图从他们的模型输出中学习时,他们突然用技术手段(隐写标记、出口管制等)来阻止。
一条获得大量赞同的评论将这个矛盾表述得极为直接:
"大型 AI 公司的虚伪论证让我头晕。三年来他们用'人类读书后创作'类比来论证训练 AI 使用版权作品。现在突然不让我们对 Claude 输出做同样的类比了。"
更深入的法律分析进一步揭示了一个制度性漏洞:AI 模型的输出目前不在传统知识产权的保护范围内。机器生成的输出不具备版权资格、不是专利、不是商业秘密(因为在销售使用权限而不是保密)、也不受合同法的约束(难以约束第三方)。在这种法律真空下,技术措施——包括隐写标记——成了 AI 公司保护模型输出的唯一可用手段。
但这恰恰也让事件的严重性升级了。如果法律框架本身无法解决 AI 时代的知识产权归属问题,技术手段的被滥用就几乎是注定的。隐写标记这次被用来反滥用,下次可能被用来做什么?
六、信任危机的五个维度
将 HN 讨论中的各路观点进行结构化梳理,可以提炼出信任危机的五个核心维度:
6.1 知情权:用户不知道发生了什么
Claude Code 的隐私政策中没有提及这套机制。Release Notes 中没有提及。用户界面上没有任何提示。如果不是 3 月份的源码泄露事故,也许它永远是个秘密。
在一个合理的设计中,任何形式的用户环境检测都应该至少满足以下三个条件之一:有文档说明、可被用户关闭、有明确的用途披露。Claude Code 的隐写标记一条都没做到。
6.2 分类标准:基于国籍的用户画像
域名列表和关键词列表的构成方式,实质上构成了以国籍为基础的分类系统。检测Asia/Shanghai时区、标记所有中国大陆域名和 AI 公司、将中国用户特征编码进 API 请求——这不是一个技术中立的"反滥用"机制,而是一个基于地理和政治边界的分类体系。
更令人不安的是系统的可扩展性。如果今天可以标记"中国时区"和"中国 AI 公司",明天是否可以标记"使用 VPN 的用户"?后天是否可以标记"批评 Anthropic 的开发者"?
6.3 双重标准:训练时 fair use,保护时隐写
AI 行业面临的核心悖论在本次事件中被前所未有地聚焦:训练数据获取时主张开放(fair use、"人类学习"类比),模型输出保护时主张封闭(隐写标记、出口管制、ToS 限制)。
开发者的困惑是真实而理性的:如果从互联网上爬取数据训练模型是"像人类读书一样的学习",那为什么从模型输出中学习就是"蒸馏"和"盗窃"?这两者之间的逻辑区分是什么?
6.4 客户端安全:隐蔽代码的寒蝉效应
编程 agent 的权限模型已经在走钢丝。它们已经可以读写你的文件系统、执行你的 Shell 命令、修改你的 Git 历史、甚至在某些配置下推送远程仓库。
在这样的高信任场景中,任何未经披露的客户端行为都会产生寒蝉效应。如果 Claude Code 可以秘密修改系统提示词,它还可以秘密做什么?这个问题没有答案,因为它需要的不是回答,而是信任——而信任正是在这一类行为中被消耗掉的。
6.5 防御失效:真正的滥用者不怕,普通开发者买单
这是社区评论中最常被点出的一个讽刺性事实:这套机制的绕过成本极低。
- 修改系统 hostname → 绕过域名名单
- 修改系统时区 → 绕过时区检测
- patch 二进制中的字符映射表 → 彻底失效
- 用进程代理包装
ANTHROPIC_BASE_URL→ 完全透明
换句话说,真正有动机、有能力的滥用者(代币倒卖商、蒸馏攻击者)根本不会被这套机制阻止。它唯一能"成功标记"的,是那些根本不知道自己在被标记的普通开发者——他们在做完全合法但稍微非常规的事情,比如通过企业合规网关路由、使用内部 API 代理、在开发环境中调用自定义端点。
这是一套惩罚合规者、放过违规者的机制。它的存在更多是为了给 Anthropic 提供内部的使用数据画像,而不是真正阻止滥用。
七、更大的图景:AI 冷战与信任工具的悖论
7.1 时间线:这不是一个孤立事件
Claude Code 隐写标记事件必须放在 AI 地缘政治的大背景下理解。以下是过去半年的关键时间线:
| 时间 | 事件 |
|---|---|
| 2025 年 11 月 | Anthropic 指控中国黑客组织利用 Claude 进行网络攻击 |
| 2026 年 2 月 | 指控 DeepSeek、月之暗面等通过 1600 万次对话蒸馏 Claude |
| 2026 年 3 月 | Anthropic 源码泄露事故,51 万行代码进入 npm |
| 2026 年 6 月 | 指控阿里巴巴通过 2.5 万账号、2900 万次交互大规模蒸馏 |
| 2026 年 6 月中旬 | 美国商务部对 Claude Fable 5 实施出口管制(6 月 30 日解除) |
| 2026 年 6 月 30 日 | 源码泄露中被发现的隐写代码被公开发布 |
| 2026 年 7 月 1 日 | Thariq Shihipar 公开回应,承诺回滚 |
这组时间线揭示了一个清晰的图景:AI 地缘政治正在从政策层面向技术层面渗透,而开发者工具成为了新的战场。
7.2 更大的悖论:工具在被"武器化"
Claude Code 最初被设计为一个生产力工具。但当它开始在系统提示词中编码用户的国籍和网络环境信息时,它客观上承担了一种与生产力工具完全无关的功能:情报收集。
这不是说 Anthropic 在为中国政府或美国政府做间谍工作。它的动机很可能是纯粹商业的——防止模型蒸馏、防止代币倒卖、保护自己的商业模式。但手段的选择决定了后果。用不可见的 Unicode 变体来秘密编码用户信息,这种行为本身就是信任的对立面。
由此引出的是一个更深层的问题:在 AI 冷战的时代,开发者工具还能保持"中立"吗?
当 GPT-5.6 的全面发布被美国政府以"网络安全风险"为由暂缓(后于 7 月 8 日放行);当 Claude Fable 5 被列入出口管制名单;当 Claude Code 在客户端嵌入针对中国用户的检测代码——每一个 AI 工具都在无意中变成了地缘政治的载体。
7.3 开源的意义被重新定义
在这一事件中,开源社区扮演了一个意想不到的角色:揭发者。
隐写代码之所以被曝光,是因为 Anthropic 的源码泄露事故使社区得以进行审计。如果没有那次事故,这套机制可能仍在运行。这个事实本身就为"闭源 vs 开源"的辩论投下了一颗重量级的砝码。
多位 HN 评论者表示,这一事件促使他们重新评估闭源 AI 工具的可信度。一条评论写道:
"这就是为什么我需要看到源代码。不是因为我一定会读,而是因为别人会读,而且当有人发现问题时,我们都会知道。"
对于中国的开发者社区,这个观点的冲击力更大。如果一家美国 AI 公司可以在客户端中秘密嵌入针对中国用户的检测代码,那么"国产替代"就不再仅仅是一个情怀选择——它正在成为一个安全需求。
八、结语:透明是唯一出路
Claude Code 隐写标记事件不应该被简化为"Anthropic 是坏人"的叙事。Anthropic 有正当的商业利益需要保护——模型蒸馏和代币倒卖确实在损害 AI 公司的商业模型,也间接推高了所有合法用户的成本。
但正当的目的不能为不透明的手段背书。
这个事件最值得被记住的教训是:当 AI 工具从"聊天窗口"升级为"高权限工作台",用户和工具提供商之间的社会契约就需要被重新定义。这份契约至少要包含以下条款:
- 知情权:任何客户端中的检测、分类、标记行为,必须有文档说明。
- 可关闭性:用户应有权选择退出任何非核心功能的数据收集。
- 分类不等于判断:基于国籍、地理位置的用户分类应始终被明确标注其目的和限制。
- 客户端行为预期:一个拥有文件系统和 Shell 权限的工具,其行为必须符合"可预测"的最低标准。
研究者在原文中的结尾值得被引用:
"开发者工具可以执行条款。API 提供方可以检测滥用。公司可以保护自己的模型。这些都没问题。但当一个拥有文件系统和 shell 权限的工具,开始把归因标记藏进不可见的提示词标点里时,正确的反应就是审视,而不是默认信任。"
信任是在最无聊的地方挣来的。一个日期字符串是不是真的只是一句日期——这个问题本不该需要被问,但当它被摆上台面时,答案的方向就已经决定了信任的去向。
对于每一个在用的 AI 开发工具上运行git diff和npm install的开发者来说,这个事件是一面值得深思的镜子:你信任你的工具,但它值得你的信任吗?
参考来源
thereallo.dev: Claude Code Is Steganographically Marking Requests
Hacker News: Claude Code Is Steganographically Marking Requests (item?id=48734373)
腾讯云开发者社区: Claude Code被曝暗藏间谍代码,专门检测中国用户
blog.ccino.org: 看不见的水印:Claude Code 被发现在请求里悄悄打标记
51CTO: Claude Code 封禁中国用户始末
AIMadeTools: Claude Code Is Steganographically Marking Requests: What It Means