前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >突发,gitee 图片崩了,深度解析原因!

突发,gitee 图片崩了,深度解析原因!

作者头像
山月
发布2022-04-11 16:17:08
1.6K0
发布2022-04-11 16:17:08
举报
文章被收录于专栏:服务器运维笔记

今天下午,群内及朋友圈内有小伙伴反映: 「Gitee 图床中的图片打不开」

在本文中,我以 https://gitee.com/Topcvan/js-notes-img/raw/master/%E5%AE%8F%E4%BB%BB%E5%8A%A1%E9%98%9F%E5%88%97.png 这个图片为例,重现下事发过程。

1. 防盗链

我一想,这肯定是突加了防盗链,来看一看防盗链的原理:

「Referer 指当前请求页面的来源页面的地址,用以判断当前页面的访问源。图片防盗链通过判断 Referer 是否目标网站而对图片替换为禁止标志的图片。」

Referer 实际上是单词 referrer 的错误拼写

比如,这次 gitee 事件中,gitee 网站上所有图片加载时,浏览器会默认给图片添加上一个请求头: referer: https://gitee.com/。而在其它网站,携带的 referer 请求头字段并非 gitee 的网站,则会返回一个占位符图片。

「但是,一般来说,防盗链图片在浏览器图片能够直接打开,因为在浏览器直接打开,不会携带 referer 请求头字段,防盗链配置会对此放行。」

如果是这样,如果在个人网站上,可「通过 Referrer Policy1 配置所有图片请求时不带 Referer 请求头字段来跨过防盗链设置」。

代码语言:javascript
复制
<meta name="referrer" content="no-referrer">

为此,我专门做了两个网页,根据已经设置了防盗链的 mdnice 网址图片,对照了一番:

  • 添加了该头,成功绕过了防盗链设置: https://vercel-api.shanyue.vercel.app/referrer
  • 没添加该头,图片被 403 禁止访问: https://vercel-api.shanyue.vercel.app/referrer/forbidden.html

403

哦对,此时打开两个网址的时候,记得「在浏览器控制台禁止缓存」:(PS: 加一个 Vary: referer 禁止这类问题多好)

然而,这对于 gitee 却没有用!

2. gitee 的防盗链措施

但是,gitee 设置的防盗链措施更为严格:

「在 gitee 中的图片,如果没有携带 referer 也会进行防盗链处理」

为此,我根据 referer 字段做了一个对照试验。

通过 cURL 「直接请求图片地址,无任何内容返回」:

代码语言:javascript
复制
$ curl 'https://gitee.com/Topcvan/js-notes-img/raw/master/%E5%AE%8F%E4%BB%BB%E5%8A%A1%E9%98%9F%E5%88%97.png' \
  --compressed

通过 cURL 直接请求图片地址,并「携带上 referer 字段,有内容并正确返回」:

代码语言:javascript
复制
$ curl 'https://gitee.com/Topcvan/js-notes-img/raw/master/%E5%AE%8F%E4%BB%BB%E5%8A%A1%E9%98%9F%E5%88%97.png' \
  -H 'Referer: https://gitee.com/' \
  --compressed
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.

截图如下:

直接在官网中替换某个 img 的 src 为个人的 gitee 图片地址,正常打开:

3. 评价

按理来说,防盗链也是为了避免网站中图片等资源被大量盗用,而造成极大的一笔服务器费用。但是 gitee 拥有更好的做法:

  1. 提前一个月进行通知,平滑过渡,也不会造成如此之大的反响
  2. 防盗链策略过于严格,在浏览器都无法直接打开图片

「哪怕像掘金这样,在右下角加一个自己的水印呢!」

参考资料

[1]

Referrer Policy:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 防盗链
  • 2. gitee 的防盗链措施
  • 3. 评价
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档