加了防盗链,Gitee 图床挂了!-LMLPHP

大家好,我是鱼皮,这两天又发生了一件挺意外的事情:Gitee 的图床废了!

昨天晚上,星球里不止一位小伙伴发帖子表示自己网站、文章中的图片竟然全部变成了 Gitee 的图标?!

加了防盗链,Gitee 图床挂了!-LMLPHP

我当时还不了解真相,心想 Gitee 这么大的代码开源平台也能挂?就问小伙伴怎么回事:

加了防盗链,Gitee 图床挂了!-LMLPHP

我想,如果是官方的问题,那肯定很多用 Gitee 来做图床的项目文档都会受到影响。于是我就去 GitHub 上随便搜了几个项目,果不其然,很多项目文档里的图标都变成了 Gitee。

千万别小看这个事情的影响!一方面是闹了不少笑话,比如下图这个项目的赞助商,都变成了 Gitee:

加了防盗链,Gitee 图床挂了!-LMLPHP

还有一些作者的引流、打赏二维码清一色都变成了 Gitee 图标,这就直接影响到作者的收入了!(一天了,作者还没发现,请大家广而告之~)

加了防盗链,Gitee 图床挂了!-LMLPHP

还有同学的博客变成了这样。。。

加了防盗链,Gitee 图床挂了!-LMLPHP

于是我先去网上简单调研了一下,有不少小伙伴都遇到了这个问题,那估计就是官方的锅了。

然后我进入 Gitee,找到自己之前搭建的图床仓库(专门用来存放图片的代码仓库),随便找到一张图片,先进入图片查看页(路径包含 blob),然后点击原始数据查看原图:

加了防盗链,Gitee 图床挂了!-LMLPHP

通过跳转的方式是能够顺利打开图片的(原图页面的地址不包含 blob):

加了防盗链,Gitee 图床挂了!-LMLPHP

然后我直接复制图片的地址,刷新页面,结果就看不到图片了。按 F12 来监听网络请求,发现图片请求并没有得到正确的响应,反而得到了一个 favicon.ico:

加了防盗链,Gitee 图床挂了!-LMLPHP

猜一猜就知道了,这个 ico 文件果然就是 Gitee 的图标!

加了防盗链,Gitee 图床挂了!-LMLPHP

那为什么从 Gitee 自己的页面跳转到真实图片地址就能显示出图片,直接访问地址就会被拦截呢?

显然是 Gitee 给图片添加了 防盗链 ,一般情况下,服务端会从客户端的请求头中读取 Referer,通过判断 referer 头是否在白名单中,来决定正常响应图片还是拦截。

为了验证这点,再做个实验。先用 Firefox 浏览器直接打开 Gitee 图片的真实地址,果然无法显示:

加了防盗链,Gitee 图床挂了!-LMLPHP

然后我们在 F12 开发者工具中找到刚刚的图片请求,点击编辑并重发:

加了防盗链,Gitee 图床挂了!-LMLPHP

然后给之前的请求补充上一个 Referer,表示从哪个页面跳转到了目标页面:

加了防盗链,Gitee 图床挂了!-LMLPHP

果然,图片就成功响应了:

加了防盗链,Gitee 图床挂了!-LMLPHP

看来,Gitee 这波真的是加了防盗链,事先没有一点儿通知(直到我发文前,也没有通知)。大家纷纷表示傻眼了:

加了防盗链,Gitee 图床挂了!-LMLPHP

那既然事情已经发生了,无论 Gitee 官方到底是临时还是永久添加了防盗链,我都不建议大家继续使用 Gitee 作为图床(本身它还有 1 M 图片大小的限制)。而是应该使用七牛云、或者腾讯 / 阿里等云服务厂商提供的稳定的对象存储服务。

对于目前已经受 Gitee 影响的小伙伴,可以做以下几件事:

  • 找到新的对象存储服务

  • 把 Gitee 仓库的代码打包下载并完整上传到新的对象存储服务中(保证路径一致)

  • 使用文本编辑器将图片的链接前缀(gitee.com/xxx)批量替换成新的存储服务链接前缀

唉,想想都麻烦。。。所以条件允许的话,还是建议大家把图片存到自己的服务器(对象存储服务),更安全放心一些。

教程推荐:《Git教程

09-03 00:17