Claude Code 会把你的邮箱发给网站?GitHub 上吵翻了
Claude Code 邮箱泄露风波:有用户反映,智能体在联网搜索时把邮箱地址写进 User-Agent 请求头发给了网站。事情到底是怎么回事。
本文的其他语言版本:العربيةDeutschEnglishEspañolFrançaisItaliano日本語Polski
Claude Code 邮箱泄露风波:11 月 5 日,GitHub 用户 taylor-edwards 在 Claude Code 仓库中报告,智能体在联网搜索时,未经同意把他的邮箱地址放进 User-Agent 请求头发给了第三方网站。不到一小时,这条帖子就登上了 Hacker News 首页,得分超过 110。
Claude Code 邮箱泄露到底发生了什么?
这份报告的标题是“Bug Report: Privacy violation in User-Agent header”,涉及 macOS 上的 Claude Code 2.1.318。作者写道,因为 Claude Code 把他的地址泄露给了随便什么网站,他现在每天收到几十封诈骗邮件,并且正在把公司迁移到智能体框架 Pi 加 OpenRouter。他要求彻底删除这一行为,而不是把它藏在 opt-in 或 opt-out 设置后面。
不过,这里要把指控和证据分开看。报告里既没有日志,也没有请求头本身,Claude Code 和垃圾邮件之间的关联只是作者自己的推断。截至发稿,报告下也没有 Anthropic 的回复,倒是有 33 个点赞。
Claude Code 究竟是怎么知道我们邮箱的?
接下来才是有意思的部分。7 月,有用户在 issue #81138 中描述:Claude Code 会从账号中读取地址(~/.claude.json 里的 oauthAccount.emailAddress),并在每次会话中以“The user’s email address is …”这一行加入模型的上下文。根据该讨论串后来的评论:
- 从 2.1.246 版本起,地址旁附有提示:除非用户明确要求,不要把它发送给无关的服务。
- 如果用 API 密钥登录,或者使用 Bedrock、Vertex,地址不会进入上下文。
- 没有任何有文档说明的设置可以关闭这一行为。
这些是用户分析代码得出的结论,Anthropic 并未证实。但它们解释了机制:不是 Claude Code 把地址硬编码进请求,而是模型自己决定要用它。
模型为什么会把地址写进请求头?
因为有些服务要求这样做。维基媒体基金会的 User-Agent 政策要求请求头中包含联系方式:邮箱、网站或 wiki 账号。一个想对 API 讲礼貌的智能体,自然会用上手边唯一的地址。
而且这也不是第一份类似的报告:
- 10 月 13 日的 #101659:一个由另一个子智能体启动的调研子智能体,在会话上下文明确禁止的情况下,仍把地址放进请求头发给了 liquipedia.net。当时用的是 Claude Code 2.1.285 和 Opus 5.5 模型,而服务器最终还是返回了 403 错误。
- 10 月 15 日的 #102577:地址在四次请求中被发给了维基百科,之后的请求才换成了通用请求头。
这三份报告都还处于打开状态,没有一份有 Anthropic 员工的评论。
为什么这件事这么受关注?
因为它涉及付费用户的个人数据,而“不要发送地址”这条指令原来只是对模型的请求,而不是一道拦截。在 HN 评论区,有人说换用 Claude Code 后开始收到垃圾邮件,也有人说自己的专用地址上并没有(这说明垃圾邮件未必都来自同一个源头)。还有一个人检查了自己的请求头,没有发现地址,所以并非所有人都受影响。
关于智能体上下文里到底装了什么的类似争议,我在写 Claude Code 的 Postman 插件时也提到过。
今后需要注意什么?
- 在批准
curl命令和网络请求之前先检查一遍,尤其是-A参数或User-Agent请求头。 - PreToolUse 钩子可以在工具调用执行前将其拦截(钩子文档中有说明)。#81138 中的用户用它来拒绝包含地址的命令,但他们也承认这并不能拦住所有情况。
- 在
CLAUDE.md里加上禁令有帮助,但它终究只是给模型的一条指令。
关于如何保护智能体,我在 AI 智能体安全指南中写得更详细。
常见问题
Claude Code 会一直发送我的邮箱地址吗?
没有证据表明这一点。报告描述的是个别情况:模型自行把地址写进了请求头,通常是针对要求提供联系方式的服务。据用户说,用 API 密钥登录时,地址根本不会进入上下文。
Anthropic 回应这些报告了吗?
截至发稿(11 月 5 日晚),GitHub 上的四个讨论串中都没有 Anthropic 的评论。在 #101659 中只能看到公司员工添加的一个标签。
能否阻止邮箱地址被传给模型?
根据 issue #81138,目前没有官方设置可以做到。用户通过 API 密钥登录或钩子来绕开,但这些都是他们自己的办法,而不是 Claude Code 的功能。