设置OSS防盗链后访问出错的问题分析及排查方法

设置OSS防盗链后访问出错的问题分析及排查方法

更新时间:2020-05-13 16:38:59

概述

本文主要介绍设置OSS防盗链后访问出错的问题分析及排查方法。

详细信息

在使用OSS的过程中,为了防止在OSS上的数据被其他人盗链,OSS支持基于HTTP的Header中表头字段Referer防盗链方法。例如,对于一个名为oss-example的Bucket,设置其Referer白名单为http://www.aliyun.com/。则所有Referer为http://www.aliyun.com/的请求才能访问oss-example这个Bucket中的Object。

设置OSS防盗链

登录OSS管理控制台,选择基础设置,单击防盗链区域的设置,配置该Bucket的防盗链。选择Bucket列表,单击目标Bucket名称,单击权限管理>防盗链,单击设置,进行配置。

说明

  • 一个Bucket可以支持多个Referer参数。

  • 在控制台设置时使用回车作为换行符分隔,通过API设置时使用逗号(,)分隔。

  • 可以设置Referer字段为空的请求访问,Referer为空的请求并不是由链接触发产生。比如,直接将地址输入地址栏打开页面,从HTTPS页面上的链接访问到非加密的HTTP页面时,在HTTP页面上是检查不到Referer的。

设置防盗链后访问出错的现象

当访问Bucket某个资源URL的时候,访问出现以下的Response报错。

<Code>AccessDenied</Code>
<Message>You are denied by bucket referer policy.</Message>

设置防盗链后访问出错的原因

报错原因是该Bucket设置了防盗链,而请求该URL的时候携带的Referer不符合防盗链的设置,需要排查可能的原因。

  • Referer为空,请求Header中没有Referer字段或者Referer字段为空。
  • Referer不在规定的Referer范围内。以下几点请注意。
    • 确认是http://还是https://配置。
    • a.aliyun.comb.aliyun.com,匹配于http://*.aliyun.comhttp://?.aliyun.com
    • domain.com匹配于http://domain.com,而不是http://*.domain.com
    • Referer格式错误,Referer配置必须带http://或者https://,否则无效,如b.aliyun.com是无效配置。

设置防盗链后访问出错的排查方法

根据访问端的不同,执行以下相应的排查操作:

  • 在实际使用中,浏览器的访问可以使用F12进入开发者工具的Network选项,查看具体请求携带的Referer,如下图所示。
  • 如果是移动端的访问,则需要借助于PC热点。移动端访问的方式使用winshark或者是fidder进行抓包,分析具体请求URL中Request的Headers中携带的Referer,目前移动端访问页面可能存在某些浏览器强制设置Referer为空的情况,也就会出现PC端访问正常,而移动端无法访问的情况,需要具体抓包分析。

适用于

  • 对象存储OSS