对象存储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.com
  • 用户A在https://10.10.10.10.com嵌入test.jpg图片,当浏览器请求访问此图片时会带上https://10.10.10.10.com的Referer,此场景下OSS将允许该请求的访问。
  • 用户B盗用了test.jpg的图片链接并将其嵌入https://127.0.0.1.com,当浏览器请求访问此图片时会带上https://127.0.0.1.com的Referer,此场景下OSS将拒绝该请求的访问。

防盗链的API接口详细信息请参见 PutBucketReferer

当您需要限定符合特定条件的用户能够访问您Bucket内的全部或部分资源、对资源授予相关操作权限等,建议您使用Bucket Policy。例如您可以通过配置Bucket Policy的来源IP,限制符合指定IP或IP地址段的用户才能访问某个Bucket。有关Bucket Policy的详情请参见添加Bucket授权策略(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.comwww.aliyun.com等;若Referer白名单配置为*.aliyun.com,且允许空Referer的情况下,则Referer为空的请求也允许访问OSS资源。
      • 通配符问号(?)表示使用问号代替一个字符。若Referer白名单配置为aliyun?.com,且不允许空Referer的情况下,则只有HTTP或HTTPS header中包含Referer字段的请求才能访问OSS资源,例如aliyuna.comaliyunb.com等;若Referer白名单配置为aliyun?.com,且允许空Referer的情况下,则Referer为空的请求也允许访问OSS资源。

      更多Referer配置示例,请参见设置防盗链

  • Referer效果
    • 如果Referer白名单为空,则所有的请求都会被允许。
    • 如果Referer白名单不为空,且不允许Referer字段为空,则只有Referer属于白名单的请求被允许,其他请求(包括Referer为空的请求)会被拒绝。
    • 如果Referer白名单不为空,但允许Referer字段为空,则Referer为空的请求和符合白名单的请求会被允许,其他请求都会被拒绝。

更多参考