把密码截进图床之后,OCR 明文和 Image ID 为什么比哈希更危险

图床被拖库时,公告里常写「密码以哈希保存」。很多人把它读成:截过图的口令也还安全。哈希保护的是登录这一家服务的账号口令;画面里的数据库密码、API Key、恢复码,会另走 OCR 文本和图片直链。2026 年 9 月 Gyazo 的披露把这三层拆开了:用户记录约 2362 万条,图片元数据约 4.9 亿条,里面有 Image ID 和 OCR 文本。

先记结论:图床登录密码的哈希,挡不住截图里已经变成文字的口令,也挡不住用 Image ID 拼出来的直链。改掉图床密码只处理这一家的登录;截图里出现过的活密钥,必须按原系统轮换。能当场核对的是:将要发出的像素里有没有可识别的口令,而不是公告里有没有「哈希」两个字。

一句话先回答搜索意图

把密码截进图床,危险不在「登录密码是不是哈希」,而在「画面本身以及从图里抽出来的文字」会不会作为独立字段离开你的电脑。哈希只覆盖账号口令这一列;OCR 文本、Image ID、上传 IP、User-Agent 和 EXIF 位置是另一组字段。后者一旦外泄,未公开截图不再靠「链接猜不到」,画面里的口令也不再需要先撞开哈希。

这篇文章给开发者、运维,以及习惯把报错、控制台、密码管理器窗口截进图床再转给同事的人。它不代替任何一家图床的事故通报,也不写成「怎么关掉截图」。你要带走的是:公告里的哈希覆盖哪一层、Image ID 让哪一种隐私模型失效、OCR 为什么比像素更容易被检索,以及上传前怎么对照将发出的内容。

这次图床披露拆开了哪几层

2026 年 9 月 16 日,Gyazo 运营方 Helpfeel 发布英文通报,并同期发布日文版。时间线写明:9 月 11 日,第三方利用图片上传服务器的漏洞执行任意命令;当晚发现异常,12 日凌晨前切断入侵路径并完成漏洞修复;14 日确认数据已外泄并暂停部分图片分发;15 日向日本个人情报保护委员会提交报告,并恢复「完成处置后新上传」图片的分发。

通报在 9 月 16 日确认的范围分两块。第一块是用户相关记录约 2362 万条,含用户自行填写的名称或昵称、邮箱、密码哈希、用户 ID、设备 ID、登录会话 ID、已连接时的 X 集成令牌、Google SSO 关联邮箱、资料、语言、注册与最近登录时间、订阅方案和计费状态。通报写明不含信用卡号等支付方式信息;这 2362 万条里也包括未登记邮箱的匿名账号,实际涉及人数仍在调查。

第二块是图片元数据。通报称,主要是 2019 年 1 月及更早登记的约 4.9 亿条(约占全部图片相关数据的 14.4%),另外还有按条件另行取出的约 240 万条。字段包括:构成图片 URL 的 Image ID、上传源 IP、User-Agent、图片内若存在则包含的 EXIF 位置、从图片抽出的 OCR 文本、图片标题、取得元 URL,以及非公开图片口令的哈希。通报里的「图片」包含截图、GIF 和视频。Helpfeel 与 Cosense 使用不同系统,截至该日未确认这两套系统外泄;在它们页面上嵌了 Gyazo 图的,可能因分发暂停而打不开。

这不是「又一家网站密码哈希被拖走」的重复新闻。哈希、会话 ID、Image ID、OCR 文本是四条平行通道。只改图床登录密码,只覆盖第一条,而且挡不住已经泄露的会话 ID——通报写明他们已对认证相关信息做失效和限制,并要求用户修改 Gyazo 密码以及在其他服务上复用的相同或相似密码。

登录密码哈希挡不住画面里的明文

密码哈希的设计目标是:库被拖走之后,攻击者不能直接读出登录口令,还要再花计算去撞。算法、盐、迭代次数决定这一层有多难,但不决定「你截进图里的另一串口令」安不安全。图床账号密码和截图里的生产库密码,从来不是同一列数据。

开发者把终端、浏览器密码框、云控制台或密码管理器窗口截下来,图床收到的是像素。许多图床会再跑一层文字识别,把像素收成可检索的 OCR 文本,方便搜索「那张写着报错的图」。识别结果一旦入库,口令、连接串、Token 就不再只活在图片字节里,而变成可以按关键词过滤的字段。这次通报把「图像的 OCR 文本」单独列进外泄元数据,说明它不是评论区的猜测,而是库里的正式列。

所以「密码是哈希保存的」只能支持很窄的结论:图床这一家的登录口令,在用户表里不是明文。它不能支持:截图里的 SSH 私钥还要先破解哈希;OCR 库里搜不到 BEGIN OPENSSH 或 AKIA;非公开图只有你打得开。后几句要另找证据:看元数据有没有 OCR 和 Image ID,以及你上传前画面上有没有可识别的秘密。

不要用真实口令、API Key 或未脱敏连接串做实验。准备一句只有这次才有的测试文本,或一张只含这句文本的截图。核对的是将发出的像素和请求里有没有这句金丝雀,不是把凭证再送进图床。

Image ID 为什么让「未公开链接」失效

不少图床把「不公开分享」做成:不把图片列进个人主页,只给你一条看起来像随机字符的直链。安全假设是:不知道 ID,就拼不出 URL。这是隐藏地址,不是访问控制。谁拿到 ID,谁就能按同一规则拼出地址。

Helpfeel 的通报把 Image ID 写成「用来构造图片 URL 的信息」,并写明第三者可能用这些信息访问对应图片。他们为此暂时关闭了部分图片的浏览。通报还确认,非公开图片的文件清单已被取走,不能完全排除部分非公开图已被查看。清单加 ID,等于把「只有我知道这条链接」这条假设拆掉。

非公开图即使另设了口令,通报列出的也是「哈希化的口令」。哈希让口令本身多走一步破解;它不让已经知道 ID、并且图床仍在按 ID 出图的人,自动失去像素。图床暂停分发,是运营侧的临时闸门,不是 ID 从未离开过数据库的证明。把「链接没发过群」写成「图不在库里」,是把产品界面的可见性和存储层的可见性混成一句。

EXIF 位置、上传 IP 和 User-Agent 是第三层上下文。手机拍的屏幕或工位环境照,可能带 GPS;上传请求会带出口地址和浏览器标识。即使像素里没有门牌号,元数据也能把「谁、从哪、用什么客户端传了一张图」拼回去。截图工具有的会去掉位置信息,有的不会;不能把「我用的是截图而不是相册」当成 EXIF 一定为空。

OCR 为什么比像素更容易被二次利用

一整张 PNG 要人工翻、要跑视觉模型,才能从杂乱桌面里找出密码框。OCR 文本是已经切好的字符串。外泄之后,检索 password、BEGIN 、sk- 或内网主机名,比翻 4.9 亿张图快一个数量级。通报没有公布识别准确率,也不需要:只要库里存了「从图抽出的文字」,攻击者面对的就是文本字段,不是只能看缩略图。

这也解释了为什么「我设了非公开」挡不住 OCR 这一层。可见性开关管的是产品页把不把图列出来;OCR 管的是图床有没有把画面收成字。两者可以同时为真:界面上未公开,库里却有标题、OCR 和 ID。拖库拿走的是库,不是你的分享按钮状态。

和阅后即焚里「对方截了你的屏幕」不是同一件事。上一篇写的是接收方设备上的副本,托管方删密文也擦不掉。这一篇写的是发送方自己把像素交给图床,图床再抽出文字、编上 ID。一边是「对方留下了」,一边是「你先交出去了」。两边都不能用「链接失效」或「密码已哈希」一笔勾掉。

你看见的说法 能支持的结论 不能支持的结论
公告写密码以哈希保存 图床登录口令在用户表里不是明文 截图里的口令也要先破解哈希
图片设为未公开、没发过分享 产品页多半没有把它列进公开列表 不知道 ID 的人永远拼不出直链
改掉了图床登录密码 这一家的登录口令已轮换 截图里的数据库口令和 API Key 也失效了
图床暂停了部分图片浏览 现在按部分 ID 暂时取不到像素 OCR 文本和历史元数据从未离开过库
截的是报错界面,不是密码管理器 你以为画面里没有口令框 OCR 一定抽不出 Token、连接串或内网地址
会话 ID 已由运营方失效 这一家当前会话可能已不能重放 X 令牌、Google SSO 关联和复用密码都安全

当场对照:上传前看画面,发出后看请求

口号不能当证据。下面只核对应由你控制的两件事:将要离开本机的像素里有没有金丝雀;以及若你改走本地工具,请求体里应不应出现原文。不要把真实生产口令送进任何图床做验证。

  1. 准备一句可丢弃的金丝雀,例如 canary-fp-20260920-gyazo-ocr。把它打在一个空白记事本或本地 HTML 里,截图。不要混入真实主机名或密钥。
  2. 放大截图,按像素核对:金丝雀是否完整入画,周围有没有状态栏通知、另一个密码框、终端里的旧命令。能读出来的字,OCR 都可能收成文本。
  3. 若你仍要走图床:打开开发者工具的 Network,勾选 Preserve log,再上传。用金丝雀搜请求体。图床上传的是图片字节,金丝雀会进文件,不进「密码哈希」那一列。这恰好证明:哈希覆盖不了这张图。
  4. 对照另一条通道。打开 阅后即焚,把同一句金丝雀写成文本,生成链接。再搜 Network:POST /secrets 的请求体里应只有密文、过期时间和阅读次数,不应出现原文,也不应出现井号后的密钥。链接形态是 s.html?id={id}#{key},密钥只在 # 后面;RFC 9110 规定请求目标 URI 不含 fragment。

前三步证明:截图通道上,秘密以像素(以及图床可能抽出的文字)离开本机。第四步证明:同一句金丝雀可以改走「本机 AES-256-GCM,只上传密文」。两条通道不要混用——不要先截进图床,再把图床直链贴进焚链;也不要把焚链的完整 URL 再截一张图传回图床。

完整链接和密文不要走同一条渠道。图床传的是像素,阅后即焚传的是密文加 # 密钥。把钥匙截进同一张图,或把 s.html?id=…#… 整串写进图片标题,井号后的保护对「能看见这张图或这条元数据的人」已经没了。

三种把「图床很安全」读过头的情况

第一,把「未公开」当成访问控制。界面不展示,只说明产品没有把它放进公开列表。Image ID 在库里,直链规则又是公开的,未分享过的图仍然可能被拼出来。通报里「非公开清单已被取走」是这条误读的反例,不是这一家独有的实现细节。

第二,把改密码当成轮换截图里的秘密。图床登录口令、会话 ID、第三方 OAuth 令牌、画面里的生产密钥,分属不同系统。官方要求修改 Gyazo 密码以及复用过的相同密码,只覆盖前几项。截过生产控制台的,还要去原系统作废密钥、轮换数据库账号、作废恢复码。本地 密码检测 只能对照公开高频弱口令名单,不能证明某串口令没进过图床 OCR。

第三,把「我截的是报错,不是密码」当成画面干净。终端里的连接串、浏览器地址栏里的 token=、通知里的验证码、隔壁窗口的邮箱,都会进同一张图。OCR 不按你的意图过滤。上传前只能逐像素看将发出的那一张,不能靠「文件名写成 error.png」。

常见问题

图床说密码是哈希存储,截图里的口令是不是也安全?

不是同一层。登录密码哈希保护的是账号口令本身,还要看算法和是否加盐。截图一旦上传,图床还可以另存 OCR 文本、Image ID、上传 IP 和 EXIF。画面里的口令、密钥、连接串,在 OCR 库里常常已经是可检索明文。

未公开、不分享的截图,是不是只有我打得开?

「未公开」通常只表示产品界面没有把它列进公开页,不等于别人拼不出地址。Image ID 是构成图片 URL 的信息。ID 一旦随元数据离开图床,未公开直链不再靠「猜不到」。运营方暂停分发,只说明现在部分 ID 暂时取不到像素,不说明历史元数据没被拷走过。

改掉图床登录密码,截图里的口令还要不要轮换?

要分开处理。改图床密码只切断这一家的登录口令,且挡不住已经泄露的会话 ID。截图里出现过的数据库口令、API Key、SSH 私钥和恢复码,必须按原系统轮换,不能用改图床密码代替。复用过的相同或相似密码,按官方建议一并改掉。

一次性口令能不能截图发给同事?

不要把活口令截进图床或聊天相册。短文本应在当前标签页用 AES-256-GCM 加密后走 阅后即焚,密钥放在链接的 # 后面,形态是 s.html?id={id}#{key}。创建和阅读都打开即用,无需账号。超过 32 KB 的材料改走 文件加密盒,单文件不超过 5 GB,输出 .lock / .enc,不要把焚链当网盘。

把同一句金丝雀改走打开即用的通道

若你希望用一个把计算边界写清楚的页面来练习,打开 FastPwd 的 阅后即焚 即可,无需注册。写入上面那句金丝雀,阅读次数留 1,生成后按第四节对照 Network:请求体里应只有密文,不应出现原文或井号后的密钥。必须把短口令交给同事时,才走这条通道,不要先截图。

画面里如果还有工单正文、手机号或证件号,先在 隐私清洗 里做规则脱敏,再决定要不要发出。清洗在本机完成,原文不作为业务数据上传,也不写入 analytics。随机口令可以先在 密码生成器 里本地生成,长度 6–128 位、默认 16 位;低于 8 位会提示安全性较低。生成过程不上传。整份截图文件若仍要外发,先在文件加密盒收成密文再传,口令单独走焚链,不要写进图床标题。

下次截图前记住三件事。第一,哈希覆盖的是图床登录口令,不是画面和 OCR。第二,Image ID 让「未公开直链」不再等于访问控制。第三,能重复的观察是上传前逐像素核对,以及改走密文通道时用金丝雀搜 Network。能写进交接说明的,只能是这三句,不能是「图床说密码是哈希,所以截图没事」。

延伸阅读

阅后即焚烧掉的是服务器上的密文,证明不了接收方没截图,见 阅后即焚能证明服务器删了密文,为什么证明不了对方没截图。网盘上传前只给压缩包加密码,挡不住文件名,也不是本机 AES-GCM,见 网盘上传前,压缩包密码能挡住什么,为什么它不是本机 AES-GCM。「本地加密、不上传」不能当证据,要用金丝雀搜 Network,见 浏览器本地加密怎么核对明文没有离开本机。