对象存储OSS支持对存储空间(Bucket)设置防盗链,即通过对访问来源设置白名单的机制,避免OSS资源被其他人盗用。
背景信息
防盗链功能通过设置Referer白名单以及是否允许空Referer,限制仅白名单中的域名可以访问您Bucket内的资源。OSS支持基于HTTP和HTTPS header中表头字段Referer的方法设置防盗链。
是否进行防盗链验证的具体场景如下:
- 仅当通过签名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将拒绝该请求的访问。
防盗链的API接口详细信息请参见 PutBucketReferer。
当您需要限定符合特定条件的用户能够访问您Bucket内的全部或部分资源、对资源授予相关操作权限等,建议您使用Bucket Policy。例如您可以通过配置Bucket Policy的来源IP,限制符合指定IP或IP地址段的用户才能访问某个Bucket。有关Bucket Policy的详情请参见通过Bucket Policy授权用户访问指定资源。
操作方式
操作方式 | 说明 |
---|---|
控制台 | Web应用程序,直观易用 |
命令行工具ossutil | 命令行工具,性能好 |
Java SDK | 丰富、完整的各类语言SDK demo |
Python SDK | |
PHP SDK | |
Go SDK | |
C SDK | |
.NET SDK | |
Node.js SDK | |
Ruby SDK |
Referer详情
以下内容详细介绍如何配置Referer,配置Referer时使用了通配符的具体示例,以及配置Referer后的效果。
- 配置Referer
- 单个Bucket支持配置多个Referer。通过控制台设置Referer时,使用回车作为换行符分隔;通过API设置Referer时,使用英文逗号(,)分隔。
- Referer参数支持通配符星号(*)和问号(?)。
- 通配符星号(*)表示使用星号代替0个或多个字符。如果Referer白名单配置为*.aliyun.com,且不允许空Referer的情况下,则只有HTTP或HTTPS header中包含Referer字段的请求才能访问OSS资源,例如help.aliyun.com、www.aliyun.com等;如果Referer白名单配置为*.aliyun.com,且允许空Referer的情况下,则Referer为空的请求也允许访问OSS资源。
- 通配符问号(?)表示使用问号代替一个字符。如果设置了包含通配符问号(?)的Referer白名单,且不允许空Referer的情况下,则只有HTTP或HTTPS Header中包含Referer字段的请求才能访问OSS资源。如果设置了包含通配符问号(?)的Referer白名单,且允许空Referer的情况下,则Referer为空的请求也允许访问OSS资源。
更多Referer配置示例,请参见设置防盗链。
- Referer效果
- 如果Referer白名单为空,且允许空Referer字段,则所有的请求都会被拒绝。
- 如果Referer白名单不为空,且不允许Referer字段为空,则只有Referer属于白名单的请求被允许,其他请求(包括Referer为空的请求)会被拒绝。
- 如果Referer白名单不为空,但允许Referer字段为空,则Referer为空的请求和符合白名单的请求会被允许,其他请求都会被拒绝。
更多参考
- 验证防盗链是否生效请参见OSS验证Refer 防盗链是否生效。
- 防盗链功能常见问题请参见OSS防盗链(Referer)配置及错误排除。