配置防盗链防止非法流量盗用
OBS提供同时支持允许白名单访问和阻止黑名单访问的配置,防止盗链。
使用场景
一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。因此,产生了防盗链技术。
在HTTP协议中,通过表头字段Referer,网站可以检测目标网页访问的来源网页。有了Referer跟踪来源,就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。防盗链就是通过设置Referer,去检测请求来源的Referer字段信息是否与白名单或黑名单匹配,如果与白名单匹配成功则允许请求访问,否则阻止请求访问或返回指定页面。
为了防止用户在OBS的数据被其他人盗链,OBS支持基于HTTP header中表头字段Referer的防盗链方法。OBS同时支持访问白名单和访问黑名单的设置。
工作原理
通过浏览器向OBS发送请求时,HTTP请求头中的Referer字段会记录发送请求的来源页面URL,OBS通过检验Referer字段的值来判断请求来源的合法性,通过配置防盗链的白名单Referer或黑名单Referer来允许或阻止访问来源。
配置防盗链后,OBS将按照以下规则进行访问控制:
- 检查请求的空Referer:OBS首先判断请求的Referer字段是否为空。
- 如果请求的Referer字段为空,按照以下判断:
- 如果防盗链配置的“允许空Referer”开关打开,则请求通过。
- 如果防盗链配置的“允许空Referer”开关关闭且“白名单Referer”配置为空,则请求通过。
- 如果防盗链配置的“允许空Referer”开关关闭且“白名单Referer”配置不为空,则请求拒绝。
- 如果请求的Referer字段不为空,按照以下规则判断。
- 如果请求的Referer字段为空,按照以下判断:
- 如果请求的Referer字段不为空,则根据请求的Referer字段中的值和防盗链配置的白名单Referer/黑名单Referer匹配情况判断:
- 白名单Referer和黑名单Referer均为空:默认允许所有网站请求通过。
- 白名单Referer不为空,黑名单Referer为空:如果请求的Referer字段中的值在白名单Referer中,则请求通过;反之,请求拒绝。
- 白名单Referer为空,黑名单Referer不空:如果请求的Referer字段中的值在黑名单Referer中,则请求拒绝;反之,请求通过。
- 白名单Referer不为空,黑名单Referer不为空:如果请求的Referer字段中的值在黑名单Referer中,则请求拒绝;如果请求的Referer字段中的值在白名单Referer中且不在黑名单Referer中,则请求通过。
约束与限制
- 防盗链的生效范围:防盗链规则在桶级别配置,仅在桶级别生效,无法针对桶中指定对象生效。
注意事项
判断用户是否有对桶及其内容访问的四种权限(读取权限、写入权限、ACL读取权限、ACL写入权限)之前,需要首先检查是否符合referer字段的防盗链规则。
由于HTTP Referer可以被轻易伪造,因此防盗链为辅助安全手段而非可靠的安全防护。如果您对数据安全性要求较高,建议您使用OBS的其他数据安全相关功能,如服务端加密、WORM等。详情请参见OBS数据安全相关功能。
使用方式
OBS支持通过管理控制台、API方式配置防盗链,不支持通过SDK、OBS Browser+、obsutil方式配置防盗链。
场景示例
以下为防盗链常用的几种场景。
仅允许可信网站访问OBS
通过防盗链的白名单Referer机制,仅允许经常访问OBS桶的受信任的Referer访问OBS。
- 查看OBS桶的日志记录,在桶日志文件中找到“Referer”字段对应的值。关于桶日志记录,请参见日志存储简介。
如果桶日志文件中“Referer”字段对应的值为“-”,表示为空Referer。
- 为桶配置防盗链规则。

表2 白名单防盗链规则 配置参数
参数值
说明
白名单Referer
https://www.example.com http://www.example.com https://console.huaweicloud.com/*
- 添加经常访问OBS桶的受信任的网站域名。
- 建议同时添加HTTPS和HTTP协议的域名。
- 添加控制台域名并使用通配符“*”,确保在不同区域的控制台上都能正常预览。
允许空Referer
允许
确保直接访问和控制台预览功能都能正常工作。
黑名单Referer
无需配置
无需禁止特定来源。
- 验证配置。
- 模拟白名单内的Referer访问OBS,预期成功。
curl -e "https://www.example.com" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟白名单外的Referer访问OBS,预期失败,返回AccessDenied。
curl -e "https://www.example01.com" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟空Referer访问OBS,预期成功。
curl https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟白名单内的Referer访问OBS,预期成功。
禁止恶意网站非法盗用OBS数据
允许所有来源访问,但要明确禁止某些恶意网站非法盗用OBS的数据。通过黑名单Referer精准拦截恶意访问来源。
- 查看OBS桶的异常流量的日志记录,在桶日志文件中找到“Referer”字段对应的值。关于桶日志记录,请参见日志存储简介。
- 为桶配置防盗链规则。

表3 黑名单防盗链规则 配置参数
参数值
说明
白名单Referer
*
允许所有来源访问OBS。
允许空Referer
允许
确保直接访问OBS和正常客户端都能正常访问。
黑名单Referer
https://badmail.example.com http://badmail.example.com *badsite.example
禁止恶意网站域名访问OBS,通配符“*”表示禁止整个域名及其子域名。
- 验证配置。
- 模拟可信网站访问OBS,预期成功。
curl -e "https://www.example.com" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟黑名单中的Referer访问OBS,预期失败,返回AccessDenied。
curl -e "https://badmail.example.com" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟空Referer访问OBS,预期成功。
curl https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟可信网站访问OBS,预期成功。
支持小程序访问OBS
通过防盗链的白名单机制,仅允许某个小程序(如https://appexample.com/{appid}/{version}/page-example.html)访问OBS。通过白名单Referer允许该小程序访问OBS。
- 获取小程序的域名,使用通配符“*”兼容小程序所有子域名。
如果需要获取小程序访问的具体Referer,可以查看小程序访问OBS桶的日志记录,在桶日志文件中找到“Referer”字段对应的值。关于桶日志记录,请参见日志存储简介。
- 为桶配置防盗链规则。

表4 白名单防盗链规则 配置参数
参数值
说明
白名单Referer
*appexample.com https://console.huaweicloud.com/*
- 使用通配符“*”兼容小程序所有子域名。
- 添加控制台域名并使用通配符“*”,确保在不同区域的控制台上都能正常预览。
允许空Referer
允许
某些情况下,小程序可能不发送Referer,允许空Referer保证兼容性。
黑名单Referer
留空
无需禁止特定来源。
- 验证配置。
- 使用小程序访问OBS,预期成功。
curl -e "https://appexample.com/kbaS3wM/page.html" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟白名单外的Referer访问OBS,预期失败,返回AccessDenied。
curl -e "https://www.example.com" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 使用小程序访问OBS(不带Referer),预期成功。
curl https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 使用小程序访问OBS,预期成功。
允许在OBS控制台预览和下载对象
通过防盗链的白名单机制,在白名单Referer中添加OBS控制台域名以确保管理功能正常。
- 为桶配置防盗链规则。

表5 白名单防盗链规则 配置参数
参数值
说明
白名单Referer
https://console.huaweicloud.com/*
添加控制台域名并使用通配符“*”兼容其所有子域名,确保在不同区域的控制台上都能正常预览。
允许空Referer
允许
确保直接访问和控制台预览功能都能正常工作。
黑名单Referer
留空
无需禁止特定来源。
- 验证配置。
模拟控制台访问,预期成功。也可以直接在OBS控制台预览和下载文件进行验证。
curl -e "https://console.huaweicloud.com" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
禁止通过URL直接访问OBS
强制要求所有访问OBS的来源都必须来自指定网站,禁止直接通过URL访问资源。
此配置将禁止空Referer,表示阻止所有直接访问方式。由于书签、邮件链接以及某些浏览器插件、下载工具或视频播放器的请求通常不带Referer,导致这些组件可能无法正常工作。
- 确定指定网站的Referer。
尽可能地找到该网站所有可能的域名和协议组合,确保覆盖所有合法访问场景。
- 为桶配置防盗链规则。

表6 白名单防盗链规则 配置参数
参数值
说明
白名单Referer
https://www.example.com http://www.example.com https://console.huaweicloud.com/*
- 尽可能地找到该网站所有可能的域名和协议组合,确保覆盖所有合法访问场景。
- 建议同时添加HTTPS和HTTP协议的域名。
- 添加控制台域名并使用通配符“*”,确保在不同区域的控制台上都能正常预览对象。
允许空Referer
不允许
禁止空Referer,可以阻止通过地址栏的链接直接访问OBS中的资源。
黑名单Referer
留空
无需禁止特定来源。
- 验证配置。
- 模拟指定网站页面访问OBS,预期成功。
curl -e "https://www.example.com" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟通过地址栏链接直接访问OBS,预期失败,返回AccessDenied。
curl https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟其他网站访问OBS,预期失败,返回AccessDenied。
curl -e "https://other.example.com" https://test-bucket.obs.cn-north-4.myhuaweicloud.com/test.txt
- 模拟指定网站页面访问OBS,预期成功。
最佳实践
- 存在绕过防盗链配置而命中CDN缓存的风险:如果OBS桶同时配置了防盗链和CDN加速域名,则当盗链请求访问OBS时,可能会由于CDN中缓存了请求的内容而导致请求直接命中CDN缓存节点并获得内容,从而绕过了OBS的防盗链配置。为确保防护体系完整有效,必须在CDN侧也配置防盗链规则。详情请参见配置防盗链规则拦截/放行指定Referer。
- 会受浏览器Referrer-Policy策略的影响:现代浏览器支持Referrer-Policy响应头,网站可通过该标头控制跨域请求中发送Referer的发送策略。当使用某些策略(如:no-referrer)时,浏览器将不发送Referer信息,OBS会将其视为空Referer处理,在配置防盗链时需要考虑此种情况(配置白名单Referer时,打开“允许空Referer”开关)。
- 需要考虑视频播放的兼容性:浏览器原生<video>标签播放视频时,会向视频服务器发起请求获取媒体数据。由于这些请求的Referer可能为空或指向其他页面,OBS必须允许空Referer访问(配置白名单Referer时,打开“允许空Referer”开关),否则视频将无法正常播放。


