对象存储OSS支持对存储空间(Bucket)设置防盗链,即通过对访问来源设置白名单的机制,避免OSS资源被其他人盗用。
背景信息
防盗链功能通过设置Referer白名单以及是否允许空Referer,限制仅白名单中的域名可以访问您Bucket内的资源。OSS支持基于HTTP和HTTPS header中表头字段Referer的方法设置防盗链。
是否进行防盗链验证的具体场景如下:
- 仅当通过签名URL或者匿名访问Object时,进行防盗链验证。
- 当请求的Header中包含
Authorization
字段,不进行防盗链验证。
- 用户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.com、www.aliyun.com等;若Referer白名单配置为*.aliyun.com,且允许空Referer的情况下,则Referer为空的请求也允许访问OSS资源。
- 通配符问号(?)表示使用问号代替一个字符。若Referer白名单配置为aliyun?.com,且不允许空Referer的情况下,则只有HTTP或HTTPS header中包含Referer字段的请求才能访问OSS资源,例如aliyuna.com、aliyunb.com等;若Referer白名单配置为aliyun?.com,且允许空Referer的情况下,则Referer为空的请求也允许访问OSS资源。
更多Referer配置示例,请参见设置防盗链。
- Referer效果
- 如果Referer白名单为空,则所有的请求都会被允许。
- 如果Referer白名单不为空,且不允许Referer字段为空,则只有Referer属于白名单的请求被允许,其他请求(包括Referer为空的请求)会被拒绝。
- 如果Referer白名单不为空,但允许Referer字段为空,则Referer为空的请求和符合白名单的请求会被允许,其他请求都会被拒绝。
更多参考
- 验证防盗链是否生效请参见OSS验证Refer 防盗链是否生效。
- 防盗链功能常见问题请参见OSS防盗链(Referer)配置及错误排除。