阿里云OSS是一个非常不错的东西,可以把网站的所有静态资源都放在离自己客户较近区域的阿里云OSS上,方便访问,也方便统一管理。
当然,阿里云OSS的费用也是比较贵的,如果被人盗链的话~费用相当可观的,阿里云OSS的费用分两部分组成,一是存储费,就是说你静态资源放在阿里云OSS就要收费。二是流量费,你的静态资源被访问产生的流量是需要收费的。所以设置防盗链非常有必要,避免产生高额流量费用。我们一起来看一下怎么操作吧~
设置防盗链功能,包括以下参数:
- Referer 白名单。仅允许指定的域名访问 OSS 资源。
- 是否允许空 Referer。如果不允许空 Referer,则只有 HTTP 或 HTTPS header 中包含 Referer 字段的请求才能访问 OSS 资源。
说得直白一点,Referer就是一把钥匙,你可以设置你的OSS资源需要钥匙访问,也可以设置不需要钥匙访问,也就是空Referer。指定Referer的意思就是你设置好可以访问OSS资源的钥匙,并且只能通过这把钥匙来访问。
我们来举个例子:
对于一个名为 oss-example 的 Bucket,设置其 Referer 白名单为https://cloud-ping.com/
。则所有 Referer 为https://cloud-ping.com/
的请求才能访问 oss-example 这个 Bucket 中的 Object。
细节分析
- Referer 验证
- 用户只有通过签名 URL 或者匿名访问 Object 时,才会做防盗链验证。请求的 Header 中有
Authorization
字段的,不会做防盗链验证。 - Bucket 的三种权限(private,public-read,public-read-write)都会做防盗链验证。
- 用户只有通过签名 URL 或者匿名访问 Object 时,才会做防盗链验证。请求的 Header 中有
- Referer 配置
- 一个 Bucket 可以支持多个 Referer 参数。通过控制台设置时使用回车作为换行符分隔,通过 API 设置时使用英文逗号(,)分隔。
- Referer 参数支持通配符星号(*)和问号(?)。
- Referer 效果
- Referer 白名单为空时,不会检查 Referer 字段是否为空(否则所有的请求都会被拒绝)。
- 如果 Referer 白名单不为空,且不允许 Referer 字段为空,则只有 Referer 属于白名单的请求被允许,其他请求(包括 Referer 为空的请求)会被拒绝。
- 如果白名单不为空,但允许 Referer 字段为空,则 Referer 为空的请求和符合白名单的请求会被允许,其他请求都会被拒绝。
通配符详解
- 星号(*):可以使用星号代替 0 个或多个字符。如果正在查找以 AEW 开头的一个文件,但不记得文件名其余部分,可以输入 AEW*,查找以 AEW 开头的所有文件类型的文件,如 AEWT.txt、AEWU.EXE、AEWI.dll 等。要缩小范围可以输入AEW*.txt,查找以 AEW 开头并以 .txt 为扩展名的文件,如 AEWIP.txt、AEWDF.txt。
- 问号(?):可以使用问号代替一个字符。例如输入love?查找以 love 开头的一个字符结尾的文件,如 lovey、lovei 等。要缩小范围可以输入 love?.doc,查找以 love 开头的一个字符结尾并以 .doc 为扩展名的文件,如 lovey.doc、loveh.doc。
具体设置方法
首先,在OSS管理控制台选择你的Bucket,然后点击该Bucket的权限管理~
其次,找到防盗链选项,点击设置。
Referer一栏里填入你需要调用OSS资源的网址,可以使用通配符*号。
允许空Referer关掉,然后点击保存即可。