防盗链

来源:互联网 发布:厦门php培训哪家好 编辑:程序博客网 时间:2024/04/28 12:27

阿里云文档防盗链

背景:
A是网站站长,在A的网站的网页里有一些图片和音频视频的链接,这些静态资源都保存在阿里云对象存储OSS上。以图片为[http://referer-test.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png]。这样的URL(不带签名)要求用户的Bucket权限为公开读权限(别人能读不能写)。
B是另一个网站的站长,B在未经A允许的情况下,偷偷使用A的网站的图片资源,放置在自己网站的网页中,通过这种方法盗取空间和流量。在这样的情况下,第三方网站用户看到的是B的网站,网站用户不知道也不关心网站里的图片是来自于哪里。由于OSS是按照使用量来收费的,这样用户A在没有获取任何收益的情况下,反而承担了资源使用费用。
本文就是介绍类似A这样的用户将资源存放在OSS上后,如何设置防盗链来避免这样情况的发生。

目前OSS提供的防盗链的实现方法主要有两种

1)设置Referer。控制台、SDK都可以操作,适合不想写代码的用户。
2)签名URL,适合喜欢开发的用户
设置Referer
这里主要说明Referer是什么,OSS如何利用Referer做防盗链
1)Referer是什么
Referer是HTTP Header的一部分,当浏览器向网站Web服务器发送请求的时候,一般都是带上Referer,告诉服务器此次请求是从哪个页面链接过来的。以上面的例子来说,假如用户B的网站叫userdomain-steal,想盗链用户A的图片链接http://referer-test.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png。A的网站域名为userdomain。
假设盗链网站userdomain-steal的网页如下:

<html>    <p>This is a test</p>    <img src="http://referer-test.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png" /></html>

假设源站为userdomain的网页如下:

<html>    <p>This is my test link from OSS URL</p>    <img src="http://referer-test.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png" /></html>

当互联网用户用浏览器访问B的网站页面http://userdomain-steal/index.html,网页里链接是A的网站的图片。由于从一个域名(userdomain-steal)请求跳到了另一个域名(oss-cn-hangzhou.aliyuncs.com),浏览器就会在HTTP请求的Header中带上Referer(表示从userdomain-steal跳转的)。
见实际文档的图片。。
OSS通过Referer防盗链的原理
通过上面的例子可以看到,浏览器在骑牛OSS资源的时候,如果发生页面条船,浏览器会在请求中带入Referer,此时Referer的值为上一页面的URL,有的时候Referer也会为空。
针对这两种情况,OSS的Referer功能提供两种选择:
1)设置是否允许空Referer访问。不能单独设置,需要配合Referer白名单一起使用。
2)设置Referer白名单
细节分析如下:用户只有通过签名URL或者匿名访问object时,才会做防盗链验证。请求的Header中有”Authorization”字段的,不会做防盗链验证。
一个Bucket可以支持多个Referer参数。
Referer参数支持通配符”*”和”?”。
白名单为空时,不会检查Referer字段是否为空(不然所有的请求都会被拒绝,因为空Referer会被拒绝,对于非空Referer OSS在Referer白名单里也找不到)。
白名单不为空,且设置了”不允许Referer字段为空”的规则。则只有Referer属于白名单的请求被允许,其他请求(包括Referer为空的请求)会被拒绝。
白名单不为空,但设置了”匀速Referer字段为空”的规则。则Referer为空的请求和符合白名单的请求会被允许,其他请求都会被拒绝。
Bucket的三种权限(private,public-read,public-read-write)都会检查Referer字段。

通配符详解:

1)星号”*”:可以使用星号代替0个或多个字符。如果正在查找以AEW开头的一个文件,但不记得文件名其余部分,可以输入AEW,查找以AEW开柔的所有文件类型的文件,如AEW.txt、AEWU.EXE、AEWI.dll等。要缩小范围可以输入AEW.txt,查找以AEW开头的所有文件类型并.txt为扩展名的文件如AEWIP.txt、AEWDF.txt。
2)问号”?”:可以使用问号代替一个字符。如果输入love?,查找以love开头一个字符结尾的文件类型的文件,如lovey、lovei等。要缩小范围可以输入love?.doc,查找以love开头的一个字符结尾文件类型并.doc为扩展名的文件如lovey.doc、loveh.doc。
再往下需要具体的操作了,我有一个OSS资源包,找时间试试 。

1 0
原创粉丝点击