配了防盗链想防别人盗图,结果先把自己的订阅者全挡了:一晚 Referer 折腾记

前两天翻 CDN 日志,气得够呛:好几个我压根没见过的小站,直接把我博客文章里的配图用 <img src="..."> 原样链了过去。页面是他们的,广告是他们的,图片流量烧的是我的。

没多想,我去 CDN 控制台把 Referer 防盗链开了,白名单里只填自己的域名,"空 Referer 一律拒绝"。

当晚在自己博客上从头到尾点了一遍,图都好好的。我甚至有点得意,觉得这事一劳永逸。

结果第二天早上,现实连环抽脸。

一、打脸来得比想象快

第一巴掌来自 RSS:我用自己订阅的阅读器刷自己的博客,封面和正文配图全是裂的。

第二巴掌来自邮件:邮件订阅服务发给我的更新通知里,图也全裂。

第三巴掌来自读者:有人在聊天软件里点了我发的链接,回我说"图打不开"。

我还不死心,把一篇文章里的图片地址复制出来,直接拖进浏览器新标签页——居然也是裂的。

自己博客里看图明明没事,换个地方就全挂。问题肯定出在我昨天加的那条防盗链上。

二、先搞懂 Referer 到底拦了什么

我打开开发者工具 → Network,点了一张图,看 Request Headers。

从博客正文点开时,请求头里有一行:

Referer: https://我的博客域名/...

这行的意思是"这张图是从我的博客页面发起的"。浏览器在网页里加载图片时,会自动带上这个头,告诉图片服务器"我从哪个页面来"。我那条白名单的逻辑就是:Referer 是我自己域名的,放行;不是的,一律 403。

可问题是,那些裂图的渠道,请求根本不是"从我的博客页面发起"的:

  • RSS 阅读器是它自己的服务器或客户端在替我抓图,Referer 是空的,或者是阅读器自己的域名;
  • 邮件更麻烦,Gmail、Outlook 这类邮箱会用自己的图片代理去拉远程图,Referer 会被剥掉或换成代理域名,我总不能把所有邮箱代理都加进白名单;
  • 聊天软件和 App 内置浏览器点开,Referer 要么为空、要么是 App 的域名;
  • 直接在新标签页打开图片,前面压根没有页面,Referer 天然就是空的。

换句话说,我白名单里"空 Referer 一律拒绝"这一条,把阅读器、邮箱、App 以及直接打开图片的自己,一锅端全挡在外面了。这些人里没有一个是来盗图的,全是正常读者。

三、更扎心的:真要盗图,它根本拦不住

如果说误伤订阅者还能用"大不了放宽一点"安慰自己,那接下来这一下才是真正的暴击。

我打开终端,随手敲了一行:

curl -I -e https://我的博客域名/ https://我的图片域名/demo.jpg

-e 是手动指定 Referer。结果——被我"严防死守"的图,伪造一个白名单内的来源,立刻就 200 拿到了。

我又试了不带 Referer 直开,返回 403;再往下想,要是写个服务端脚本直接把图抓下来转存,连浏览器都没有,哪来的 Referer?

到这儿我才算彻底明白:Referer 这东西是浏览器自觉自愿填的,它不是密码、不是签名,谁都能改。 它能挡住的,只有那种"懒得动手、直接在网页里 <img src> 链你图"的轻度白嫖;真正想把图搬走的人,一行命令、一段脚本就绕过了。

防君子不防小人。而我用它,先把君子(订阅者、自己人)全误伤了,小人一个没挡住。

四、几种做法,我在心里过了一遍

冷静下来之后,我把可选的路子列了一下:

  1. 维持严格白名单、拒绝空 Referer:最"安全",但 RSS、邮件、App 全裂,而且得没完没了地往白名单里补阅读器和邮箱代理的域名,永远补不全。
  2. 白名单 + 允许空 Referer:只拦那些明确带着外站域名来的页面引用,阅读器、邮件、直开这些空 Referer 都能恢复。代价是别人伪造一个空 Referer 也能绕过——但能这么干的人,本来就拦不住。
  3. 签名 URL / 时效链接:防盗最彻底,可历史文章和订阅里的旧链接会过期,要处理续签,维护起来很烦。
  4. 干脆不做 Referer 硬拦截,平时看一眼 CDN 日志:哪个域名在集中扒我的图,日志里一目了然,真有过分的再单独处理。

我就是个写博客的,图也不是什么值钱的独家素材,犯不上为了那点白嫖流量,让订阅读者天天看裂图、还把自己拴在维护白名单这件事上。

五、最后的处理

我把那条严格白名单删了,最终选择不做 Referer 硬拦截,只在 CDN 日志里留个心眼,盯着异常集中的引用。

图源这边我也顺手做了归置:现在博客的配图统一放在图床小镇,它不做 Referer 硬拦截,博客正文、RSS、邮件、直接打开图片都能出图,我不用再维护那份注定列不全的白名单。至于写文时怎么截图、传图、把链接回填到 Markdown,我之前记过一套顺手的流程(一篇教程要截三十多张图,我把截图传图压成了两个动作),图源这块不折腾之后,整个配图链路就没什么需要操心的了。

邮箱代理为什么会改 Referer、邮件里的图还有哪些别的坑,我在另一篇邮件配图排查里写过(帮朋友排查了一封"没有图片"的促销邮件),这里就不展开了。

这次折腾,我记下三条

  • Referer 是浏览器自觉带的请求头,不是安全凭证,能被一行命令伪造,防君子不防小人;
  • 空 Referer 不等于盗链,阅读器、邮件代理、App 内置浏览器、直接打开图片全是空 Referer,默认拒绝它就是误伤自己人;
  • 个人小站别上严格白名单,"允许空 Referer"或干脆不硬拦、配合日志监控,比什么都强。

官网:https://imgbed.cn

posted @ 2026-10-17 21:12  234123412341234  阅读(6)  评论(0)    收藏  举报