
# 配置防盗链防止非法流量盗用
OBS提供同时支持允许白名单访问和阻止黑名单访问的配置，防止盗链。
#### 使用场景
一些不良网站为了不增加成本而扩充自己站点内容，经常盗用其他网站的链接。一方面损害了原网站的合法利益，另一方面又加重了服务器的负担。因此，产生了防盗链技术。
在HTTP协议中，通过表头字段referer，网站可以检测目标网页访问的来源网页。有了referer跟踪来源，就可以通过技术手段来进行处理，一旦检测到来源不是本站即进行阻止或者返回指定的页面。防盗链就是通过设置Referer，去检测请求来源的referer字段信息是否与白名单或黑名单匹配，如果与白名单匹配成功则允许请求访问，否则阻止请求访问或返回指定页面。
为了防止用户在OBS的数据被其他人盗链，OBS支持基于HTTP header中表头字段referer的防盗链方法。OBS同时支持访问白名单和访问黑名单的设置。
#### Referer规则
- 白名单Referer/黑名单Referer输入的字节数不能超过1024个字符。
- Referer格式：
  - Referer可以设置多个，多个Referer换行隔开；
  
  - Referer参数支持通配符（\*）和问号（?），通配符可代替0个或多个字符，问号可代替单个字符；
  
  - 如果下载时Referer头域包含了http或https，则Referer设置必须包含http或https。
   
- 白名单Referer为空，黑名单Referer不空时，允许所有黑名单中指定网站以外的其他网站的请求访问目标桶中的数据。
- 白名单Referer不为空，黑名单Referer为空或不空时，允许在白名单且不在黑名单中的网站的请求访问目标桶中的数据。
- 当白名单Referer与黑名单Referer内容有交集时，交集部分Referer被禁止。例如：当白名单Referer与黑名单Referer输入框中的referer字段都有"https://www.example.com"时，系统是阻止该网站的请求访问的。
- 黑名单Referer与白名单Referer都为空时，默认允许所有网站的请求访问目标桶中的数据。
- 判断用户是否有对桶及其内容访问的四种权限（读取权限、写入权限、ACL读取权限、ACL写入权限）之前，需要首先检查是否符合referer字段的防盗链规则。
- Referer配置支持泛域名。
 
#### 前提条件
已经配置了静态网站托管。
#### 使用方式
OBS支持通过[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)、API方式配置防盗链，不支持通过SDK、OBS Browser+、obsutil方式配置防盗链。
#### 使用OBS控制台
1. 在OBS[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)左侧导航栏选择"桶列表"。
2. 在桶列表中，单击待操作的桶，进入"对象"页面。
3. 在左侧导航栏单击"数据安全\>防盗链"，进入"防盗链"界面。
4. 单击"白名单Referer"/"黑名单Referer"后的![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000001843454554.png)，输入白名单/黑名单。
   
   Referer规则如下：
   - 白名单Referer/黑名单Referer输入的字节数不能超过1024个字符。
   
   - Referer格式：
     - Referer可以设置多个，多个Referer换行隔开；
     
     - Referer参数支持通配符（\*）和问号（?），通配符可代替0个或多个字符，问号可代替单个字符；
     
     - 如果下载时Referer头域包含了http或https，则Referer设置必须包含http或https。
      
   
   - 白名单Referer为空，黑名单Referer不空时，允许所有黑名单中指定网站以外的其他网站的请求访问目标桶中的数据。
   
   - 白名单Referer不为空，黑名单Referer为空或不空时，允许在白名单且不在黑名单中的网站的请求访问目标桶中的数据。
   
   - 当白名单Referer与黑名单Referer内容有交集时，交集部分Referer被禁止。例如：当白名单Referer与黑名单Referer输入框中的referer字段都有"https://www.example.com"时，系统是阻止该网站的请求访问的。
   
   - 黑名单Referer与白名单Referer都为空时，默认允许所有网站的请求访问目标桶中的数据。
   
   - 判断用户是否有对桶及其内容访问的四种权限（读取权限、写入权限、ACL读取权限、ACL写入权限）之前，需要首先检查是否符合referer字段的防盗链规则。
   
   - Referer配置支持泛域名。
   
   
   
   
5. 单击![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000001843453260.png)保存设置。
 
#### 使用API
[设置防盗链白名单](https://support.huaweicloud.com/api-obs/obs_04_0027.html#section15)
#### 场景示例
以下为防盗链常用的几种场景。
#### 仅允许可信网站访问OBS
通过防盗链的白名单机制，仅允许经常访问OBS桶的受信任的Referer访问OBS。通过白名单Referer允许可信网站访问OBS。
1. 查看OBS桶的日志记录，在桶日志文件中找到"Referer"字段对应的值。关于桶日志记录，请参见[桶日志概述](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829095.html#ZH-CN_TOPIC_0000002383757020)。
   
   ![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/note_3.0-zh-cn.png)
   如果桶日志文件中"Referer"字段对应的值为"-"，表示为空Referer。
   
   
2. 为桶配置防盗链规则。 
   配置步骤请参见[使用OBS控制台]，配置参数如[表1]所示。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002609888675.png "点击放大")
    表1白名单防盗链规则 
   | 配置参数       | 参数值                                                                                      | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   |:---|:---|:---|
   | 白名单Referer | ``` https://www.example.com http://www.example.com https://console.huaweicloud.com/* ``` | - 添加经常访问OBS桶的受信任的网站域名。  - 建议同时添加HTTPS和HTTP协议的域名。  - 添加控制台域名并使用通配符"\*"，确保在不同区域的控制台上都能正常预览。   |
   | 允许空Referer | 允许                                                                                       | 确保直接访问和控制台预览功能都能正常工作。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | 黑名单Referer | 留空                                                                                       | 无需禁止特定来源。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
      
   
   
3. 验证配置。 
   - 模拟白名单内的Referer访问OBS，预期成功。
   
   - 模拟白名单外的Referer访问OBS，预期失败，返回AccessDenied。
   
   - 模拟空Referer访问OBS，预期成功。
   
   
   
   
 
#### 禁止恶意网站非法盗用OBS数据
允许所有来源访问，但要明确禁止某些恶意网站非法盗用OBS的数据。通过黑名单Referer精准拦截恶意访问来源。
1. 查看OBS桶的异常流量的日志记录，在桶日志文件中找到"Referer"字段对应的值。关于桶日志记录，请参见[桶日志概述](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829095.html#ZH-CN_TOPIC_0000002383757020)。
2. 为桶配置防盗链规则。 
   配置步骤请参见[使用OBS控制台]，配置参数如[表2]所示。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002579377918.png "点击放大")
    表2黑名单防盗链规则 
   | 配置参数       | 参数值                                                                             | 说明                                  |
   |:---|:---|:---|
   | 白名单Referer | \*                                                                              | 允许所有来源访问OBS。                        |
   | 允许空Referer | 允许                                                                              | 确保直接访问OBS和正常客户端都能正常访问。              |
   | 黑名单Referer | ``` https://badmail.example.com http://badmail.example.com *badsite.example ``` | 禁止恶意网站域名访问OBS，通配符"\*"表示禁止整个域名及其子域名。 |
      
   
   
3. 验证配置。 
   - 模拟可信网站访问OBS，预期成功。
   
   - 模拟黑名单中的Referer访问OBS，预期失败，返回AccessDenied。
   
   - 模拟空Referer访问OBS，预期成功。
   
   
   
   
 
#### 支持小程序访问OBS
通过防盗链的白名单机制，仅允许某个小程序（如https://appexample.com/{appid}/{version}/page-example.html）访问OBS。通过白名单Referer允许该小程序访问OBS。
1. 获取小程序的域名，使用通配符"\*"兼容小程序所有子域名。 
   如果需要获取小程序访问的具体Referer，可以查看小程序访问OBS桶的日志记录，在桶日志文件中找到"Referer"字段对应的值。关于桶日志记录，请参见[桶日志概述](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829095.html#ZH-CN_TOPIC_0000002383757020)。
   
   
2. 为桶配置防盗链规则。 
   配置步骤请参见[使用OBS控制台]，配置参数如[表3]所示。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002579537822.png "点击放大")
    表3白名单防盗链规则 
   | 配置参数       | 参数值                                                       | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   |:---|:---|:---|
   | 白名单Referer | ``` *appexample.com https://console.huaweicloud.com/* ``` | - 使用通配符"\*"兼容小程序所有子域名。  - 添加控制台域名并使用通配符"\*"，确保在不同区域的控制台上都能正常预览。   |
   | 允许空Referer | 允许                                                        | 某些情况下，小程序可能不发送Referer，允许空Referer保证兼容性。                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 黑名单Referer | 留空                                                        | 无需禁止特定来源。                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
      
   
   
3. 验证配置。 
   - 使用小程序访问OBS，预期成功。
   
   - 模拟白名单外的Referer访问OBS，预期失败，返回AccessDenied。
   
   - 使用小程序访问OBS（不带Referer），预期成功。
   
   
   
   
 
#### 允许在OBS控制台预览和下载对象
通过防盗链的白名单机制，在白名单Referer中添加OBS控制台域名以确保管理功能正常。
1. 为桶配置防盗链规则。 
   配置步骤请参见[使用OBS控制台]，配置参数如[表4]所示。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002609977705.png "点击放大")
    表4白名单防盗链规则 
   | 配置参数       | 参数值                                       | 说明                                            |
   |:---|:---|:---|
   | 白名单Referer | ``` https://console.huaweicloud.com/* ``` | 添加控制台域名并使用通配符"\*"兼容其所有子域名，确保在不同区域的控制台上都能正常预览。 |
   | 允许空Referer | 允许                                        | 确保直接访问和控制台预览功能都能正常工作。                         |
   | 黑名单Referer | 留空                                        | 无需禁止特定来源。                                     |
      
   
   
2. 验证配置。 
   模拟控制台访问，预期成功。也可以直接在OBS控制台预览和下载文件进行验证。
   
   
 
#### 禁止通过URL直接访问OBS
强制要求所有访问OBS的来源都必须来自指定网站，禁止直接通过URL访问资源。
![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/caution_3.0-zh-cn.png)
此配置将禁止空Referer，表示阻止所有直接访问方式。由于书签、邮件链接以及某些浏览器插件、下载工具或视频播放器的请求通常不带Referer，导致这些组件可能无法正常工作。
1. 确定指定网站的Referer。 
   尽可能地找到该网站所有可能的域名和协议组合，确保覆盖所有合法访问场景。
   
   
2. 为桶配置防盗链规则。 
   配置步骤请参见[使用OBS控制台]，配置参数如[表5]所示。
   ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002609897807.png "点击放大")
    表5白名单防盗链规则 
   | 配置参数       | 参数值                                                                                      | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   |:---|:---|:---|
   | 白名单Referer | ``` https://www.example.com http://www.example.com https://console.huaweicloud.com/* ``` | - 尽可能地找到该网站所有可能的域名和协议组合，确保覆盖所有合法访问场景。  - 建议同时添加HTTPS和HTTP协议的域名。  - 添加控制台域名并使用通配符"\*"，确保在不同区域的控制台上都能正常预览对象。   |
   | 允许空Referer | 不允许                                                                                      | 禁止空Referer，可以阻止通过地址栏的链接直接访问OBS中的资源。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 黑名单Referer | 留空                                                                                       | 无需禁止特定来源。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      
   
   
3. 验证配置。 
   - 模拟指定网站页面访问OBS，预期成功。
   
   - 模拟通过地址栏链接直接访问OBS，预期失败，返回AccessDenied。
   
   - 模拟其他网站访问OBS，预期失败，返回AccessDenied。
   
   
   
   
 
#### 最佳实践
- **存在绕过防盗链配置而命中CDN缓存的风险：** 如果OBS桶同时配置了防盗链和CDN加速域名，则当盗链请求访问OBS时，可能会由于CDN中缓存了请求的内容而导致请求直接命中CDN缓存节点并获得内容，从而绕过了OBS的防盗链配置。为确保防护体系完整有效，必须在CDN侧也配置防盗链规则。详情请参见[配置防盗链规则拦截/放行指定Referer](https://support.huaweicloud.com/usermanual-cdn/zh-cn_topic_0064907768.html)。
- **会受浏览器Referrer-Policy策略的影响：**现代浏览器支持Referrer-Policy响应头，网站可通过该标头控制跨域请求中发送Referer的发送策略。当使用某些策略（如：no-referrer）时，浏览器将不发送Referer信息，OBS会将其视为空Referer处理，在配置防盗链时需要考虑此种情况（配置白名单Referer时，打开"允许空Referer"开关）。
- **需要考虑视频播放的兼容性：**浏览器原生\<video\>标签播放视频时，会向视频服务器发起请求获取媒体数据。由于这些请求的Referer可能为空或指向其他页面，OBS必须允许空Referer访问（配置白名单Referer时，打开"允许空Referer"开关），否则视频将无法正常播放。
 
