开发者社区 问答 正文

关于Bucket的操作之如何实现 PutBucketReferer?

Put Bucket Referer操作可以设置一个bucket的referer访问白名单和是否允许referer字段为空的请求访问。Bucket Referer防盗链具体见 OSS防盗链

请求语法PUT /?referer HTTP/1.1
Date: GMT Date
Content-Length:ContentLength
Content-Type: application/xml
Host: BucketName.oss.aliyuncs.com
Authorization: SignatureValue

<?xml version="1.0" encoding="UTF-8"?>
<RefererConfiguration>
<AllowEmptyReferer>true</AllowEmptyReferer >
    <RefererList>
        <Referer> http://www.aliyun.com</Referer>
        <Referer> https://www.aliyun.com</Referer>
        <Referer> http://www.*.com</Referer>
        <Referer> https://www.?.aliyuncs.com</Referer>
    </RefererList>
</RefererConfiguration>





请求元素(Request Elements)

名称描述是否必需
RefererConfiguration保存Referer配置内容的容器 类型:容器 子节点:AllowEmptyReferer节点、RefererList节点 父节点:无
AllowEmptyReferer指定是否允许referer字段为空的请求访问。 类型:枚举字符串 有效值:true或false 默认值:true 父节点:RefererConfiguration
RefererList保存referer访问白名单的容器。 类型:容器 父节点:RefererConfiguration 子节点:Referer
Referer指定一条referer访问白名单。 类型:字符串 父节点:RefererList可选


细节分析

  1. 只有Bucket的拥有者才能发起Put Bucket Referer请求,否则返回403 Forbidden消息。错误码:AccessDenied。
  2. AllowEmptyReferer中指定的配置将替换之前的AllowEmptyReferer配置,该字段为必填项,系统中默认的AllowEmptyReferer配置为true。
  3. 此操作将用RefererList中的白名单列表覆盖之前配置的白名单列表,当用户上传的RefererList为空时(不包含Referer请求元素),此操作会覆盖已配置的白名单列表,即删除之前配置的RefererList。
  4. 如果用户上传了Content-MD5请求头,OSS会计算body的Content-MD5并检查一致性,如果不一致,将返回InvalidDigest错误码。


示例


[backcolor=transparent]请求示例:
[backcolor=transparent]不包含Referer的请求示例: PUT /?referer HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 247
Date: Fri, 04 May 2012 03:21:12 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfj byc:KU5h8YMUC78M30dXqf3JxrTZHiA=

<?xml version="1.0" encoding="UTF-8"?>
<RefererConfiguration>
<AllowEmptyReferer>true</AllowEmptyReferer >
< RefererList />
</RefererConfiguration>


[backcolor=transparent]包含Referer的请求示例: PUT /?referer HTTP/1.1
Host: oss-example.oss.aliyuncs.com
Content-Length: 247
Date: Fri, 04 May 2012 03:21:12 GMT
Authorization: OSS qn6qrrqxo2oawuk53otfj byc:KU5h8YMUC78M30dXqf3JxrTZHiA=

<?xml version="1.0" encoding="UTF-8"?>
<RefererConfiguration>
<AllowEmptyReferer>true</AllowEmptyReferer >
< RefererList>
<Referer> http://www.aliyun.com</Referer>
<Referer> https://www.aliyun.com</Referer>
<Referer> http://www.*.com</Referer>
<Referer> https://www.?.aliyuncs.com</Referer>
</ RefererList>
</RefererConfiguration>


[backcolor=transparent]返回示例: HTTP/1.1 200 OK
x-oss-request-id: 534B371674E88A4D8906008B
Date: Fri, 04 May 2012 03:21:12 GMT
Content-Length: 0
Connection: keep-alive
Server: AliyunOSS

展开
收起
青衫无名 2017-10-20 10:39:50 2193 分享 版权
阿里云 AI 助理回答

阿里云对象存储服务(OSS)的Put Bucket Referer操作允许用户为指定的Bucket设置Referer防盗链配置,以此来保护存储在OSS中的资源不被未经授权的第三方网站盗用。以下是关于此操作的关键点和示例的详细解析:

功能说明

  • 白名单设置:通过RefererList节点,您可以定义一系列允许访问该Bucket中对象的HTTP Referer头部值。这可以是具体的域名、通配符模式等。
  • 空Referer处理AllowEmptyReferer参数决定是否允许那些没有Referer字段的请求访问Bucket中的内容。默认情况下,这个值是true,意味着即使请求没有Referer信息,也能访问资源。如果设为false,则无Referer的请求会被拒绝。
  • 覆盖行为:执行此操作会完全替换之前设置的Referer白名单及空Referer的允许状态。上传一个空的RefererList将清除所有先前设置的白名单条目。

请求语法

请求需要包含特定的HTTP头和正文内容,其中正文采用XML格式描述Referer配置。例如,要允许空Referer并添加几个特定的白名单条目,请求示例中的XML部分可能如下所示:

<RefererConfiguration>
  <AllowEmptyReferer>true</AllowEmptyReferer>
  <RefererList>
    <Referer>http://www.aliyun.com</Referer>
    <Referer>https://www.aliyun.com</Referer>
    <Referer>http://www.*.com</Referer>
    <Referer>https://www.?.aliyuncs.com</Referer>
  </RefererList>
</RefererConfiguration>

注意事项

  • 权限要求:只有Bucket的所有者才能进行此操作,否则会收到403 Forbidden错误。
  • 一致性校验:如果提供了Content-MD5头,OSS会验证请求体的完整性,不一致会导致InvalidDigest错误。
  • 成功响应:成功的请求返回HTTP 200状态码,但响应体为空。

示例

提供的示例展示了如何发起请求,包括不含Referer列表的请求和包含具体Referer规则的请求。注意,实际请求中需替换Authorization头中的签名字符串以及调整其他如Host、Date等头信息以匹配您的环境和认证信息。

通过上述介绍和示例,您应该能够理解并实施阿里云OSS的Bucket Referer防盗链配置,从而增强存储资源的安全性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答