隐私实践 ·

云平台环境变量被拖走之后,新密钥为什么不该再发到聊天窗口

旧密钥作废只完成一半。新 API Key 一旦再贴进聊天、截图或工单,就会留下可搜索、可同步、可归档的明文副本。下面按公开事故把「第二轮泄露」拆开,并写出当场能核对的交接边界。不是阅后即焚的操作说明。

对照残留通道 本机加密交接 打开即用
00 / 目录

先分清 哪一轮 泄露

本篇只回答「轮换之后,新密钥为什么不该再发到聊天窗口」。不是阅后即焚的表单说明,也不是某家云平台的完整事故报告。

01 / 两轮

真正危险的是 第二轮

第一轮发生在托管侧:旧密钥已经被别人读走过。第二轮发生在你自己手上:新密钥又被写成一条能留下来的消息。

2026 年 8 月下旬,云部署平台 Zeabur 公开了一起环境变量被未授权读取的事件。官方状态页写明:攻击者用一枚内部服务凭据,定向查询并导出了项目 Variables,目标是可直接使用的 AI 服务 API Key 和其他凭据。状态页列出的键名包括 OPENAI_API_KEYANTHROPIC_API_KEYOPENROUTER_API_KEYDATABASE_URLAWS_ACCESS_KEY_ID,以及 JWT、Stripe、GitHub 等常见格式;自定义变量名只要值长得像这些凭据,也被算进暴露范围。可对照 Zeabur 状态页事故说明

iThome 2026 年 8 月 31 日报道补充了一条时间线:公司在 8 月 26 日察觉异常,次日呼吁用户立刻轮换,并核对应账单与用量。同一周,科技新报转述创办人说明:查询日志显示攻击者针对 AI API Key 做了定向导出。暗网论坛上后来出现「完整数据包」的叫卖截图,官方当时表示已掌握的证据并不支持那份材料的真实性——本文也不把它当成已证实事实。

这类事故里,处理清单几乎是固定的:作废旧密钥、检查用量、轮换成新的。第一轮泄露已经发生在托管侧,你无法把别人读走过的字符串从对方手里收回来。真正容易被跳过的,是第二轮:新密钥生成之后,你还要把它交给同事、贴进另一台机器的环境,或写进临时工单。这一步如果再走聊天窗口,等于把「刚轮换出来的明文」重新写进一条可搜索、可同步、可被管理员导出的记录。

平台名在这里只用来锚定时间和公开事实。结论对任何「先轮换、再交接」的场景都成立:数据库口令、CI Token、临时 SSH 密码,危险的不是「对方看得到」,而是「中间每一跳都可能留下一份完整明文」。本文不复盘某家云平台该如何加固,也不把 UsePwd 写成能阻止托管侧被读的保险箱。

02 / 残留

聊天窗口会 留下什么

聊天软件被设计成「说过的话还能找回来」。对日常协作这是优点,对 API Key 则是缺陷。

你把 sk- 开头的字符串贴进频道后,至少会出现几份副本。消息正文会进该工作区的历史;桌面端和手机端各自再存一份缓存;有的产品会把内容送进服务端搜索索引,方便三个月后按「openai」两个字捞回来。管理员导出、法律取证、离职交接时的「聊天记录打包」,都会把当时那条明文一起带走。删除单条消息,通常删不掉对方已读的推送、已下载的客户端库,以及截图软件顺手留下的那一帧。

这和「信任同事」不是同一件事。同事需要那把新密钥,才能把服务重新跑起来。问题在于:聊天通道默认按「可检索的工作记录」来保存,而不是按「看完即止的一次性秘密」来保存。你在频道里写「新 key 如下」,等于同时通知了所有能搜索该频道的人,包括后来被拉进群的人、拥有审计导出权限的人,以及未来某个能访问备份的人。

即时聊天
可搜索的明文气泡

Slack、Discord、微信、飞书都会把正文留下。撤回不保证对端缓存消失。

邮件与文档
可转发的完整副本

主题、附件、云文档评论都会被索引。一次「转发全部」就能再复制一份。

工单与截图
归档后的像素明文

支持系统按工单号保存图片。相册备份、投影和会议录像是另一条通道。

当场可以核对的办法很土,但有效:打开你们团队常用的聊天软件,搜索 sk-AKIAghp_Bearer BEGIN PRIVATE KEY。能搜到多少条,就说明过去有多少次「先发再说」。这些记录不会因为你已经在云控制台点过 Rotate 而自动作废——旧密钥在托管侧失效,聊天里的那份字符串却还在。

外发工单或把聊天记录贴进公开频道前,正文里的 Token、手机号和身份证号可以用隐私清洗在当前标签页做脱敏对照。清洗原文默认不上传。这一步解决的是「发出去的文本还带不带秘密」,解决不了「秘密本身该不该进聊天」。

边界

把密钥从聊天里删掉,不等于泄露结束。对端可能已经复制、截图或写入自己的密码管理器。本文讨论的是「不要制造新的明文副本」,不是「删消息就能收回已读过的秘密」。

03 / 步骤

轮换时哪一步 最容易再漏

事故通知信通常只写「立刻轮换并检查账单」。真正漏掉的,是轮换之后那 20 分钟里的交接动作。

把常见应急流程摊开,危险点并不在「登录厂商控制台生成新 Key」这一下,而在前后几步。有人会先把旧 Key 截图发给同事确认「是不是这一把」;有人会把控制台整页截下来,地址栏、其他项目名和账单数字一起进相册;有人生成新 Key 后,因为「同事不在工位」,先丢进群里说「先顶上」。这三步都会把明文写成可长期保存的对象。

另一条更容易被忽略的路径是网盘和仓库。有人把 .env 直接丢进共享文件夹,或把含密钥的示例提交进临时代码分支。云盘同步会在每台已登录设备上再落一份;Git 历史即使后来改掉文件,旧提交里的字符串仍在。单文件不超过 5 GB 的本地备份,应先在当前标签页打成密文再存,而不是把明文 .env 当普通文档上传。UsePwd 的文件加密盒用 AES-256-GCM 做流式本地加密,输出 .lock / .enc,文件默认不上传。那是「自己留一份密文文件」,不是「把密钥塞进聊天」。

先截图再轮换 01 相册、AirDrop 和会议录像会把旧密钥和新密钥一起留下。
群里先顶上 02 频道历史比事故本身活得更久。后来进群的人也能搜到。
明文 .env 进网盘 03 同步目录等于多台设备各存一份。删除云端文件不保证本地副本消失。
工单里贴完整 Key 04 支持系统按编号归档。外包座席、后续升级单都能再次打开。

Zeabur 事故里,用户最先感知到的往往不是「变量被导出」这条日志,而是 AI 账单突然跳用量。公开报道里已有人在官方通知发出前就发现额度耗尽。这说明:旧密钥可能已经被拿去请求过。此时如果把新密钥再用同一条聊天通道发出去,攻击者并不需要再入侵一次托管平台——他们只要能看到你团队平时怎么交接,就可能等到下一把。

新口令本身也要够随机。随机模式长度 6–128 位,默认 16 位;低于 8 位时工具会提示安全性较低。生成走密码生成器,在当前标签页完成,不必注册。生成之后不要顺手「保存到浏览器」再截一张密码管理器的屏发给别人:那又回到截图通道。

04 / 对照

明文粘贴和本机加密 差在哪

你必须把一段短秘密交给另一个人,又不希望通道历史里留下能直接使用的字符串。先对照留下的是什么,再选工具。

聊天窗口交出的是明文。接收方复制方便,发送方也方便,代价是工作区、搜索和备份各持一份。邮件附件同样如此:.env 或记事本一旦作为附件发出,邮件服务器和双方客户端都有完整文件。

一次性加密链接交出的是「密文编号 + 只在本机的解密材料」。UsePwd 阅后即焚在当前标签页用 Web Crypto 按 AES-256-GCM 加密文本,再把密文交给服务器;解密密钥接在地址 s.html?id={id}#{key}# 之后。创建页和阅读页都打开即用,双方都不用注册。服务器只暂存密文、有效小时数和阅读次数,看不到明文,也没有账号体系可以「按用户找回」。

把密钥放在 # 后面,解决的是「托管侧访问日志和 HTTP 请求行」这一层:浏览器不会把片段当作请求的一部分发出去。原理拆解见已有文章URL 的 # 片段为什么不会出现在服务器日志里。本篇要补的是另一层:即便密钥不进 UsePwd 的请求行,你把完整链接贴进聊天后,聊天软件仍然保存整串地址。谁拿到完整链接,谁就能在次数用尽前打开阅读页解密。阅后即焚限制的是服务器上密文的寿命和次数,不是接收方是否截图、是否转发。

聊天明文
通道里是密钥本身

历史可搜索。作废云端旧 Key 之后,聊天里的字符串还在。

阅后即焚
通道里是完整链接

次数用尽后服务器删除密文。链接失效,不等于聊天记录被擦掉。

文件加密盒
通道里是 .lock 文件

密文文件可进网盘。口令仍须另通道交接,不要写在同一条消息里。

因此,阅后即焚适合「看完即止的短秘密」:新 API Key、临时数据库口令、一次性验证码。它比把 sk- 直接贴进群更干净,因为通道历史里不再是能直接调用厂商 API 的字符串;对方打开并达到设定次数后,服务器上的密文删除,迟来的搜索结果打不开明文。它仍然要求你信任发送通道本身——完整链接不要发到公开频道,也不要连同口令截图一起发。

UsePwd 没有账号,没有密码库,也不能按用户找回口令。链接丢了、片段被截断、次数用尽,服务器都无法替你还原明文。需要长期保存、多设备同步或紧急找回时,应使用专门的密码管理器,不要把本站理解成账号系统。身份说明见关于

不要读反

本机加密交接不能挽回已经在托管侧被导出的旧密钥。旧的必须先作废。本文只讨论新密钥怎么交给同事,避免第二轮明文残留。

05 / 核对

当场怎么 核对交接

目标不是证明「全世界都看不到」,而是证明:这次交接没有在聊天历史里留下可直接使用的明文。

  1. 01
    先作废旧密钥,再生成新的

    在对应厂商控制台撤销已暴露的 Key。不要用真实生产密钥做下面的练习。示例字符串只要你自己认得出来即可,例如 demo-not-a-real-key-2026

  2. 02
    打开阅后即焚,不要先打开聊天

    进入阅后即焚。页面打开即可用,不必登录。把示例文字加密成一条链接。形态应是 s.html?id={id}#{key}:问号后只有编号,密钥只在 # 之后。

  3. 03
    把链接发给接收方,不要把示例文字再贴一遍

    聊天窗口里应只出现完整 URL。若你习惯先打字「key 是 xxx,链接在下面」,就等于同时留下明文和链接,一次性材料失去意义。

  4. 04
    接收方打开后,回看频道搜索

    在该频道搜索示例字符串本身。应当搜不到正文里的那串字,只能搜到链接。再搜索 s.html?id=,确认你没有把链接截断到 # 之前——缺了片段,对方只能取到密文,无法在本机解开。

  5. 05
    需要时再用网络面板看请求

    创建时的 POST 正文应是密文和两个数字,不是示例文字;随后的 GET 路径里只有 id。这一步核的是「密钥有没有进 HTTP」,与安全说明互补。生产环境可能还有发往 /tj/ 的访问分析,载荷是页面与按钮名,不是明文。

工单场景多一步:发给支持人员的截图里,用隐私清洗先对照 Token 是否仍以完整形式出现。清洗在当前标签页完成,原文不写进分析。核对的是「像素里还有没有能直接粘贴使用的密钥」,不是「工单系统安不安全」。

06 / 选择

什么时候连链接也 不该用

一次性链接减少的是「通道历史里的明文密钥」,不是「世界上所有能看见屏幕的人」。

若秘密需要被长期保存、在多台设备之间同步,或将来必须能找回,不要用阅后即焚,也不要依赖聊天记录当保险柜。那是密码管理器的工作。UsePwd 不提供账号或密码库,次数用尽或链接丢失后无法代为恢复。

若秘密是高价值主密钥、根证书或能转走资金的钱包助记词,链接和聊天都不够。当面口述、离线介质,或只在双方已经建立的端到端通道里传。片段方案挡不住本机已被控制、浏览器扩展能读当前页面,也挡不住你把完整地址投影到会议室墙上。

文件备份走另一条路径:明文 .env 先在本机打成 .lock / .enc,再进网盘;解锁口令用不同于文件本身的通道交接。两条工具不要混成同一种保证:焚链管短秘密的次数,文件盒管你自己留着的密文文件。

回到这篇的问题。云平台环境变量被拖走之后,旧密钥必须作废,这没有捷径。新密钥不该再发到聊天窗口,是因为聊天默认保存可搜索的明文,而轮换的意义就是让旧字符串立刻失效——你不该在同一分钟里,再制造一份活得更久的副本。需要一次性交给同事时,用本机加密、打开即用的阅后即焚;需要自己留备份时,用文件加密盒。两页和本篇一样,顶栏右侧只有语言切换,没有登录入口。

07 / 下一步

读完去 核对通道

文章回答「新密钥为什么不该再发到聊天窗口」。要生成一条可焚毁的加密链接,打开阅后即焚即可,不必先注册。