
一位工程师把GitHub Copilot放在了一个"中间人代理"后面——就是那种能拦截所有网络流量的技术手段。
结果?他看到了Copilot在每次你敲键盘之前、之中和之后,到底偷偷往服务器上发了什么。
结论只有一句话:你的API密钥、数据库密码、甚至你粘贴到聊天框里的敏感token,全在裸奔。
这不是黑客攻击,不是漏洞利用。这是Copilot自己的"正常功能"。
01 MITM实验:Copilot背后到底在干什么
工程师Rafael Pierre做了一件很多开发者想过但没动手的事——用mitmproxy拦截VS Code和Copilot之间的全部流量,然后对照VS Code的开源代码,逐条还原Copilot的数据链路。
来源:Lighthouse Newsletter,Rafael Pierre,2026年8月
他发现了三件让人后背发凉的事:
发现一:你还没打字,Copilot就已经在"看"你了
打开VS Code的瞬间,Copilot就开始发请求——认证、模型发现、MCP注册、仓库上下文扫描。有一个/models/session/intent端点,会在你发送prompt之后、AI回复之前,先把你的prompt拿去打分,分类成code-gen、debugging、reasoning等意图,然后决定用哪个模型来处理。
哦?也就是说,你以为你在和"一个AI"对话,实际上背后有个"交通指挥员"在根据你的问题内容分流你的数据。
发现二:.env文件的内容会"搭便车"
他在.env文件里放了假密钥,直接编辑.env——没触发请求。但打开一个完全不相关的pyproject.toml打字时,completion请求的context字段里赫然包含了.env的内容。
💡 翻译成人话:你在.env里写了什么,只要这个文件最近被编辑过,不管你现在在编辑哪个文件,它都会被当作"上下文"一起打包发给服务器。关掉.env的内联补全?没用。因为请求根本不是从.env文件触发的。
发现三:SQLite数据库明文存储了你的一切
Copilot内置了一个叫Chronicle的工具,连着一个叫session-store.db的本地数据库。存储了所有聊天prompt、AI回复、工作仓库、会话摘要——全是明文,零脱敏。
Pierre往聊天框发了假GitHub token、假AWS密钥、带密码的数据库连接字符串——全部原封不动存进数据库。源码(sessionStore.ts)确认:没有列级脱敏,写入路径也没有scrub操作。
📍 文件位置(macOS)
~/Library/Application Support/Code/User/globalStorage/github.copilot-chat/session-store.db
不信?你现在就可以打开看看。

02 不只是Copilot——整个圈子都有问题
如果你觉得这只是Copilot一家的锅,那你可以再看看。
今年被ASE 2026(自动化软件工程顶会)收录的一篇论文,来自约克大学和卡尔加里大学的研究团队,做了一件很硬核的事:翻遍了Reddit上29个编程社区、446个帖子、6280多条评论,梳理出AI编程工具的32类安全问题。
来源:Study maps developer-reported risks in AI-native IDEs,ASE 2026
43.1%
安全投诉指向"未授权文件操作"
45.9%
隐私投诉指向"缺乏透明度"
32类
梳理出的安全问题类型
结果?一长串翻车记录:
Copilot被报告能绕过.gitignore和.copilotignore配置直接读取.env文件(研究者还复现了这个行为)
Claude Code被报告未经同意就执行了chmod +x给脚本加了执行权限
有用户报告Cursor在搜索.env文件以获取数据库凭证
一个Cline用户发现"API请求卡住时,某些正在修改的文件会被静默删除"
来源:Reddit开发者社区投诉汇总,ASE 2026论文引用
更离谱的是另一项独立测试:
多个AI编码工具会偷偷读取写给竞争对手的私人指令文件。
研究者在Claude Code的私人指令文件里放了一个暗号,然后用空工作目录运行Copilot。结果Copilot默认加载了Claude的指令文件,把它塞进发给远程服务器的第一条prompt里,完美返回了那个暗号。
也就是说:你在Claude里写的私人规则,可能被Copilot偷偷打包发给了GitHub的服务器。Muse Code、GitHub Copilot CLI、OpenCode、Grok都出现了类似行为。只有Claude、Gemini和Kimi守住了边界。
来源:AI Coding Clients Are Reading Each Other's Personal Instructions,RuntimeWire,2026年8月
这已经不是"某一家工具的问题"了。这是整个AI编程工具赛道的系统性隐私风险。

03 GitHub 4月就开始用你的代码训练AI了
如果你觉得上面这些只是"技术层面的风险",那这个就是商业层面的现实了。
📅 关键时间线
2026年4月24日起,GitHub正式将Copilot Free、Pro和Pro+用户的交互数据默认用于训练AI模型。
来源:GitHub官方博客,2026年3月25日公告
什么叫"交互数据"?官方写得很直白:inputs、outputs、code snippets、associated context。展开来说包括——你接受或修改后的输出、发给Copilot的输入、光标周围的代码上下文、注释和文档、文件名、仓库结构、导航模式。
你必须在设置里手动关闭才行。不关?默认就是开着的。
有人会说:我买的是Business或Enterprise,不受影响。
对,企业版确实受Data Protection Agreement保护。但问题是——你的开发者的真实工作流可能早就越过了边界。
⚠️ 边界是怎么被绕过的:
很多开发者同时登录个人GitHub和企业GitHub,在个人IDE里调试企业代码,在公司电脑上装个人版插件。一旦企业代码在个人Copilot对话、个人仓库或个人调试环境里出现过,企业版买来的那层"数据保护"就已经被绕过了。
更要命的是——GitHub自己也说了:content exclusion(内容排除配置)不支持Chat的Edit和Agent模式。而且Copilot coding agent不会因为你配了内容排除就自动忽略那些文件。
你以为你设了围栏,结果AI直接翻墙了。

04 开发者自救指南:5步降低裸奔风险
说了这么多吓人的,来点实际的。以下5个操作你今天就能做:
检查你的session-store.db
找到这个路径,用DB Browser for SQLite(免费开源)打开,看看user_message和assistant_response表里存了什么。如果你曾在聊天框里粘贴过密钥——现在你就能看到了。建议定期清理。
📍 macOS
~/Library/Application Support/Code/User/globalStorage/github.copilot-chat/session-store.db
📍 Windows
%APPDATA%/Code/User/globalStorage/github.copilot-chat/session-store.db
📍 Linux
~/.config/Code/User/globalStorage/github.copilot-chat/session-store.db
立刻检查训练数据开关
VS Code → Settings → 搜索"Allow GitHub to use my data for AI model training" → 设为Disabled。个人付费版默认是开的。企业版用户也请确认开发者没有在个人账号里操作企业代码。
.env文件用环境变量替代
别把密钥写在.env文件里放在项目目录。改用系统级环境变量,或者用密钥管理工具(1Password CLI、HashiCorp Vault、AWS Secrets Manager)。即使AI工具读了你的项目目录,也拿不到密钥。
用容器或沙箱隔离AI编程环境
学术研究中最推荐的缓解方式就是sandboxing。用Docker devcontainer、虚拟机或远程开发环境运行AI编程工具,限制它只能访问你明确授权的目录。VS Code Remote Containers + Copilot组合可以做到:AI工具只能看到容器内的文件系统,无法访问host机器上的.env、SSH密钥或其他敏感文件。
普通用户为什么也该关心
你可能不是程序员,但你用Cursor、Copilot或者其他AI工具处理过工作文档吗?你在ChatGPT/Claude的聊天框里粘贴过合同、报表、或者个人信息吗?这些工具的隐私逻辑是相通的——它们都在收集"上下文"来让回答更智能。
🛡️ 黄金原则:不要把任何你不想公开的信息粘贴到AI工具的对话框里。除非你读过它的隐私政策、确认了数据不会被用于训练、且本地存储有加密保护。

写在最后
AI编程工具正在从"聪明的代码补全"进化成"有状态的开发者系统"——它知道你在哪个仓库工作过、编辑过哪些文件、粘贴过什么密钥、和AI聊过什么内容。
每增加一个上下文来源,工具就更好用一点。但同时,它对你的"全貌"了解也更深一层。
这不是让你放弃AI编程工具。而是提醒你在享受效率红利的同时,保持清醒:工具是你在用,但数据它在收。
至少现在你知道了——打开那个SQLite文件看看,然后决定下一步怎么做。
夜雨聆风