出现的场景
最近在部署博客项目的时候接触到了防盗链这个概念,之前对这个词是没有概念的,最近知道了在Nginx中做一些简单配置就实现了防盗链,想着还是对这部分内容做一些梳理来加深记忆
认识防盗链
防盗链功能通过设置Referer白名单以及是否允许空Referer,限制仅白名单中的域名可以访问您Bucket内的资源。OSS支持基于HTTP和HTTPS header中表头字段Referer的方法设置防盗链。
# 在nginx的配置文件中配置资源防盗链(指定目录or指定文件类型)
# location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
location /upload/ {
access_log off;
# 域名白名单,去掉则阻止所有非本站请求
alid_referers none blocked server_names *.bbchin.com 127.0.0.1 localhost ~\.google\. ~\.baidu\. ~\.qq\.;
if ($invalid_referer) {
rewrite ^/ https://cdn.jsdelivr.net/gh/qinhua/cdn_assets/img/robber.jpg;
# return 403;
}
proxy_pass http://127.0.0.1:8090; // 代理来源
}
是否进行防盗链验证的具体场景如下
- 仅当通过签名URL或者匿名访问Object时,进行防盗链验证。
- 当请求的Header中包含Authorization字段,不进行防盗链验证
作用以及原理
防盗链通过请求Header中的Referer地址判断访问来源。当浏览器向Web服务器发送请求的时候,请求Header中将包含Referer,用于告知Web服务器该请求的页面链接来源。OSS根据浏览器附带的Referer与用户配置的Referer规则来判断允许或拒绝此请求,如果Referer一致,则OSS将允许该请求的访问;如果Referer不一致,则OSS将拒绝该请求的访问。例如,某个Bucket设置了Referer为https://10.10.10.10:
用户A在https://10.10.10.10嵌入test.jpg图片,当浏览器请求访问此图片时会带上https://10.10.10.10的Referer,此场景下OSS将允许该请求的访问。
用户B盗用了test.jpg的图片链接并将其嵌入https://192.168.0.0,当浏览器请求访问此图片时会带上https://192.168.0.0的Referer,此场景下OSS将拒绝该请求的访问。
拓展:也可以通过oss控制台来设置防盗链
操作步骤
-
登录OSS管理控制台。
-
单击Bucket列表,之后单击目标Bucket名称。
-
单击权限管理 > 防盗链。
-
在防盗链区域,单击设置。
-
在Referer框中,填写域名或IP地址,支持通配符星号()和问号(?),多个Referer以换行分隔。示例如下:
配置为www.aliyun.com,可匹配如www.aliyun.com/123、www.aliyun.com.cn等以www.aliyun.com为前缀的地址。
通配符星号()表示使用星号代替0个或多个字符。例如配置为www.aliyun.com/,可匹配如http://www.aliyun.com/和https://www.aliyun.com/地址。配置为.aliyun.com,可匹配如help.aliyun.com、www.aliyun.com等地址。
通配符问号(?)表示使用问号代替一个字符。
支持带端口的域名或IP地址,例如www.example.com:8080、10.10.10.10:8080等地址。 -
在允许空Referer框中,选择是否允许Referer为空。
空Referer表示HTTP或HTTPS请求中,不带Referer字段或Referer字段为空。如果不允许空Referer,则只有HTTP或HTTPS Header中包含Referer字段的请
求才能访问OSS资源。
说明 当您使用OSS的Bucket域名(如bucketname.oss-cn-zhangjiakou.aliyuncs.com)预览MP4文件时,由于浏览器默认会同时发出两个请求,其中一个为带Referer的请求,另一个为空Referer的请求,因此设置防盗链时必须同时满足在Referer中添加Bucket域名,且允许空Referer的条件。当您使用OSS的Bucket域名预览非MP4文件时,则仅需允许空Referer。
单击保存。
评论区