阿里云 OSS 如何设置防盗链, 上个月图床流量耗费50G+,请求次数10W+,什么鬼?

本文为 Exception 教程网原创,作者: 犬小哈,转载请注明出处 https://www.exception.site/essay/how-to-set-aliyun-oss-http-referer

阿里云OSS防盗链

一、背景

小哈前天陆续接到三个电话,但都因为忙于工作、下雨天等各种因素导致没接上,电话均来自杭州,心理一想,估计是阿里云的客服吧,因为之前也会偶尔接到他们的电话,比如回访之类的。

感觉应该也不是什么要紧的事儿。直到晚上,躺在床上休息的时候,无意翻动手机,鬼使神差的,我点开了短信查看。

PS: 小哈平常不怎么主动去翻短信,短信上常年数字 1000+,主要里面内容基本上是一些验证码啊、垃圾短信啊啥的,也懒得去清理。

手机短信1000+

无意间看到下面这条短信:

oss欠费通知

打了一个激灵,事情并不简单,如果还不及时续费,网站图片(小哈网站图片均存储在阿里云 OSS 对象存储上)都将无法访问!

吓得我赶紧又续费了 50 块钱!

充五十块钱

二、背后有啥猫腻

暂时解决了 OSS 快到期的问题后,我开始回想整个事情的经过。OSS 当时开通的是按时付费的,因为使用的比较少,选择按时付费要更划算一些。

但是这一个月来,小哈写博客频率高了一些,另一方面,也为了公众号文章能有个良好的阅读体验,也是能用图片展示的,就尽量少上一行代码。

但是小哈的个站,每天的访问量只有可怜的几十个IP, 但是 OSS 后台的统计是下面这个鬼样子的:

oss上个月使用情况

存储用量暂且不说,外网流出流量 50G+,图片读请求 10w+, 什么鬼啊!这个数据对于每天访问几十个IP的个站,绝对是不正常的!

支出情况

由于是按小时付费,峰值的时候,每小时就耗费5块大洋,这谁顶得住啊,账户上就那点钱,不欠费才怪呢!

问题原因,小哈首先想到的是图片被盗链了!

三、什么是盗链?

oss文件请求图谱

以下来自百度百科官方解释:

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。

通俗来说,就是存储在小哈图片服务器上图片,在未经过授权的情况下,被别人擅自使用了。

四、为什么会被盗链?

有一些类似于下图中爬虫网站,每天大批量的爬取文章,凭着自己网站权重高,即使不是原创,也能在百度中排名靠前,赚取广告费啥的,这里不得不吐槽一下百度。

好了,回归正题,这些爬虫网站没有自己的图片服务器(因为要钱),而是直接引用的原文的图片链接:

盗链网站

盗链网站使用的图片链接地址

最终,这些图片的请求流量,全都由图片的所有者来买单。

五、OSS 设置防盗链

OSS 是按使用量收费的服务,为了减少存储于 OSS 的数据被其他人盗链而产生额外费用,OSS本身是支持设置Referer,基于 HTTP 和 HTTPS header 中表头字段Referer 的防盗链方法。

我们可以通过控制台为自己的存储空间设置 Referer 字段的白名单、以及是否允许 Referer 字段为空的请求访问。

接下来,进入阿里云控制台,设置 OSS 白名单,这里我设置为自己的网站域名 www.exception.site, 也就是说 header 请求头中, Referer 为 www.exception.site 的网站,才能被够允许访问,否则直接拒绝:

OSS设置防盗链

  • :选择需要设置防盗链的 Bucket;
  • :设置防盗链 HTTP Referer 白名单;
  • :保存;

六、验证一下效果

6.1 Referer 为空测试

通过 curl 命令来访问一下 bucket 中的某张图片,此时 header 头中的 Referer 属性值为空,看下是否能够正常访问:

随机访问一下图片

可以看到请求失败 AccessDenied.

6.2 Referer 一个不在白名单的域名测试

通过 -e 参数传递一个未设置在白名单中的地址,看能够访问成功:

不存在于oss白名单中的地址访问测试

依然不能够访问成功,测试正常!

再来验证下上面说的盗链网站是否还能够正常访问,首先我们清空浏览器缓存:

图片全部打不开了

Nice!图片已经打不开了。

舒服了

6.3 存在于白名单中的域名测试

这里小哈直接访问自己的网站来验证效果:

看下个人网站是否能够正常访问

图片请求 header 头的 Referer 属性值与设置的一致,个人网站图片均能够正常访问。

七、另外一些应对手段

除了防盗链的设置,目前来看按小时付费套餐已经不太合适了,在阿里云上购买一个下行流量包,半年6个月,每个月50G流量,价格60块大洋,当然了,超出的得另算。

阿里云半年流量包

如果说未来流量继续增大的话,那就要考虑带过期时间的图片访问、CDN, 以及购买回源流量包了,那就是后话了,有机会小哈再给大家分享。下期见!

Ref

免费分享 | 阿里 P8 高级架构师吐血总结的 《Java 核心知识整理&面试.pdf》

获取方式: 关注微信公众号: 小哈学Java, 后台回复"资源",既可免费无套路获取资源链接哦,下面是目录以及部分截图:

关注微信公众号【小哈学Java】,回复“666”,即可免费无套路领取哦

关注微信公众号【小哈学Java】,回复“666”,即可免费无套路领取哦

关注微信公众号【小哈学Java】,回复“666”,即可免费无套路领取哦

关注微信公众号【小哈学Java】,回复“666”,即可免费无套路领取哦

关注微信公众号【小哈学Java】,回复“666”,即可免费无套路领取哦

关注微信公众号【小哈学Java】,回复“666”,即可免费无套路领取哦

重要的事情说两遍,获取方式: 关注微信公众号: 小哈学Java, 后台回复"资源",既可免费无套路获取资源链接哦 !!!

欢迎关注我的微信公众号: 小哈学Java

小哈学Java,关注领取10G面试学习资料哦