type
status
date
slug
summary
tags
category
icon
password
起因
我使用阿里云的对象存储(OSS) 服务管理博客中用到的图片,个人站点访问量不大,一年下来流量费用只有几块钱,十分省心。
今天突然接到阿里云的续费通知,登录后台发现预存余额少了很多,检查发现对象存储跑了 20 多个 G 的流量,有接近 2 万条新的访问。大概率是站内的图片链接被其他地方引用,比如一些爬虫站把站内的文章和图片资源一股脑拿走,而我在为这些流量付费。
亡羊补牢,果断开启防盗链。
开启防盗链
开启防盗链的方法很简单,登录自己对象存储服务所在的后台,选择对应的 Bucket,比如我使用的阿里云操作如下:
- 点击数据安全中的防盗链
- 开启防盗链,并输入白名单 Referer (必填)
- 保存生效(如果你知道盗链所在的站,也可以写黑名单,它的优先级最高)
查询 Referer
注意:填写 Referer 时,要注意前缀 http 和 https 是不同的。如果你不确定 referer 是什么,可以浏览器打开自己的网站
- 鼠标右键,选择检查
- 在浏览器的开发者工具中,选择 Network 标签页
- 刷新页面,找到图床存储的图片,在 Headers 选项卡中查看对应的 Referer
空 Referer 是什么
我们看到配置防盗链会有一个空 Rerefer,当勾选允许时,简单理解为允许直链打开资源的链接。这是因为在浏览器中直接输入存储服务中的链接时,是没有 Referer 这个参数的,自然就是空的。
如果你像我一样,需要在 Obsidian 这类本地笔记中添加图片的图床地址并直接预览,就需要勾选允许,否则在 Obsidian 中直接引用图片链接是不显示的。
验证防盗链是否生效
开启防盗链后,我们可以验证一下是否生效。验证方法也很简单,新建一个内容为
abc
的文本文档 test.txt
,上传至对象存储中并生成链接。使用 curl
向指定链接发起请求,看是否能够正常响应。正常响应的情况下,终端回打印 abc
字段。对空的 referer 进行验证
- 通过
curl
命令不加参数访问,代表通过浏览器直接打开URL。
- 由于设置了允许Referer为空,没有报错,系统直接打印test.txt中的内容。
- 如果设置了不允许 Referer 为空,则会出现
AccessDenied
的 报错
对白名单中的 Referer 进行验证
curl
添加参数 -e
可以指定 referer
地址进行请求。我们期望当 referer 为白名单域名时可以正常请求,非白名单域名为则禁止。关于什么是 Referer,可以参考以下文章
HTTP Referer 教程 - 阮一峰的网络日志
希望大家在互联网上分享内容的同时,也要避免不法盗用,引起的不必要的流量费用增加。