当OSS资源被其他网站非法引用导致流量费用激增时,可以通过配置Referer黑白名单来限制资源的访问来源,防止资源被盗用。
工作原理
当浏览器向OSS请求文件时,HTTP请求的Referer标头会标识发起请求的源页面URL。OSS通过校验Referer值来判断请求来源的合法性,基于预设规则允许或拒绝访问。
配置防盗链后,OSS按照以下优先级顺序执行访问控制判断:
空Referer检查:OSS首先判断请求的Referer字段是否为空。如果为空,按以下逻辑判断:
允许空Referer:请求通过。
不允许空Referer且白名单为空:请求通过。
不允许空Referer且白名单不为空:请求拒绝。
如果Referer不为空,继续下一步检查。
黑名单检查:OSS检查请求的Referer是否匹配黑名单。匹配到任意一项则立即拒绝,不再检查白名单;未匹配则继续下一步检查。
白名单检查:OSS检查请求的Referer是否匹配白名单。匹配成功则请求通过,未匹配到任何一项则请求拒绝。
配置方式
前往Bucket列表,单击目标Bucket。
在左侧导航栏选择,启用防盗链选项,按照需求配置Referer规则:
白名单 Referer:允许访问的域名列表,每行一个。
黑名单 Referer:禁止访问的域名列表,每行一个。黑名单优先级高于白名单。
空 Referer:是否允许不带Referer的请求(如直接在浏览器地址栏访问)。
截断 QueryString:是否在匹配时忽略URL中
?之后的查询字符串,详见QueryString解析规则。
Referer规则支持通配符:
通配符
说明
示例
*代替0个或多个字符
*.example.com可匹配http://www.example.com、https://help.example.com等?代替1个字符
http://www.aliyun?.com可匹配http://www.aliyunc.comReferer规则也支持带端口的域名或IP地址,如
http://www.example.com:8080、10.10.10.10:8080。说明匹配时不忽略协议(Scheme),配置
http://www.aliyun.com不能匹配https://www.aliyun.com。建议同时添加HTTP和HTTPS版本。单击保存,完成设置。
场景示例
仅允许受信任的网站访问
通过白名单机制仅允许指定网站访问OSS资源,同时支持用户直接通过浏览器访问。
步骤一:获取Referer
配置前需获取访问OSS资源的请求来源Referer:
通过OSS实时日志:前往Bucket列表,在目标Bucket的中查找
referer字段,显示为-表示空Referer。通过浏览器开发者工具:按F12打开开发者工具,在网络面板中查看请求的
Referer标头。
步骤二:配置Referer规则
配置项 | 配置值 | 说明 |
白名单 Referer |
| 添加信任的网站域名,建议同时添加HTTP和HTTPS版本。添加控制台域名确保管理功能正常。 |
黑名单 Referer | 留空 | 无需禁止特定来源。 |
空 Referer | 允许 | 确保用户可直接在浏览器地址栏访问,或从不发送Referer的客户端正常访问。 |
截断 QueryString | 允许 | 忽略URL查询字符串,提高匹配灵活性。 |
步骤三:验证配置
# 模拟白名单内的Referer访问(预期成功)
curl -e "http://www.aliyun.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 模拟白名单外的Referer访问(预期返回AccessDenied)
curl -e "http://www.example.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 模拟空Referer访问(预期成功)
curl http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt禁止特定恶意网站盗用
允许大部分来源访问,但明确禁止某些恶意网站盗用资源。通过黑名单机制精准拦截恶意来源。
步骤一:获取恶意网站Referer
前往Bucket列表,在目标Bucket的中筛选异常流量记录,查看referer字段识别恶意网站域名。
步骤二:配置Referer规则
配置项 | 配置值 | 说明 |
白名单 Referer |
| 通配符表示允许所有来源访问。 |
黑名单 Referer |
| 禁止的恶意网站域名,使用通配符可禁止整个域名及其子域名。 |
空 Referer | 允许 | 确保直接访问和正常客户端能正常访问。 |
截断 QueryString | 允许 | 忽略URL查询字符串,提高匹配灵活性。 |
步骤三:验证配置
# 模拟正常网站的请求(预期成功)
curl -e "http://www.example.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 模拟黑名单内网站的请求(预期返回AccessDenied)
curl -e "http://bad-site.example" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 模拟空Referer访问(预期成功)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt支持微信小程序访问
微信小程序发起的请求Referer固定为https://servicewechat.com/{appid}/{version}/page-frame.html格式,需针对此格式进行配置。
步骤一:获取微信小程序Referer格式
微信小程序的Referer格式固定且规律,无需特别获取,可直接使用通配符配置。如需确认具体格式,可前往Bucket列表,在目标Bucket的中查看referer字段。
步骤二:配置Referer规则
配置项 | 配置值 | 说明 |
白名单 Referer |
| 使用通配符兼容所有微信小程序的appid和版本号。添加控制台域名确保管理功能正常。 |
黑名单 Referer | 留空 | 无需禁止特定来源。 |
空 Referer | 允许 | 某些情况下小程序可能不发送Referer,允许空Referer确保兼容性。 |
截断 QueryString | 允许 | 忽略URL查询字符串,提高匹配灵活性。 |
步骤三:验证配置
# 模拟微信小程序的请求(预期成功)
curl -e "https://servicewechat.com/wx1234567890abcdef/1/page-frame.html" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 模拟其他来源的请求(预期返回AccessDenied)
curl -e "http://www.example.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 模拟空Referer访问(预期成功)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt允许OSS控制台预览和下载
设置防盗链后,需在白名单中添加OSS控制台域名以确保管理功能正常。
步骤一:配置规则
配置项 | 配置值 | 说明 |
白名单 Referer |
| 使用通配符兼容所有OSS控制台的子域名,确保在不同区域的控制台中都能正常预览。 |
黑名单 Referer | 留空 | 无需禁止特定来源。 |
空 Referer | 允许 | 确保直接访问和控制台预览功能都能正常工作。 |
截断 QueryString | 允许 | 忽略URL查询字符串,提高匹配灵活性。 |
步骤二:验证配置
# 模拟控制台访问(预期成功)
curl -e "https://oss.console.aliyun.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt也可直接在OSS控制台尝试预览和下载文件进行验证。
禁止通过URL直接访问
强制所有访问都必须来自指定网站页面,通过禁止空Referer阻止用户直接通过URL访问资源。
此配置会阻止所有直接访问方式,包括从书签、邮件链接等途径的访问。某些浏览器插件、下载工具或视频播放器可能无法正常工作,因为这些请求通常不包含Referer。
步骤一:确定网站的Referer
确定业务网站的所有可能域名和协议组合,确保配置覆盖所有合法访问场景。
步骤二:配置规则
配置项 | 配置值 | 说明 |
白名单 Referer |
| 业务网站域名,根据实际情况添加所有需要支持的域名和协议组合。添加控制台域名确保管理功能正常。 |
黑名单 Referer | 留空 | 无需禁止特定来源。 |
空 Referer | 不允许 | 关键配置,不允许空Referer可有效阻止通过地址栏直接访问资源。 |
截断 QueryString | 允许 | 忽略URL查询字符串,提高匹配灵活性。 |
步骤三:验证配置
# 模拟网站页面的请求(预期成功)
curl -e "http://www.example.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 模拟直接访问(预期返回AccessDenied)
curl http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 模拟其他网站的请求(预期返回AccessDenied)
curl -e "http://other.example" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txtQueryString解析规则
如果设置不允许截断QueryString,OSS将按照以下规则解析:
规则 | 说明 |
不解码QueryString | 请求URL为 |
忽略参数大小写 | 请求URL为 |
不解析参数顺序 | 请求URL为 |
应用于生产环境
CDN缓存绕过风险:当OSS资源配置了CDN加速时,盗链请求可能直接命中CDN边缘节点缓存并获得服务,从而绕过OSS的防盗链验证。为确保防护体系完整有效,必须在CDN层面配置相同的Referer防盗链规则,实现多层防护。
浏览器Referrer-Policy策略影响:现代浏览器支持Referrer-Policy标头,允许网站控制跨域请求中发送Referer的详细程度。某些策略(如no-referrer)会导致浏览器不发送Referer信息,这类请求将被OSS视为空Referer处理,需要在配置时予以考虑。
视频播放兼容性:使用浏览器原生video标签播放在线视频文件时,浏览器通常发起两种请求:带Referer的初始页面加载请求和用于获取媒体数据的空Referer请求。为确保视频播放功能正常,必须允许空Referer访问。
配额与限制
触发条件:仅当通过匿名访问或签名URL方式访问Object时,OSS才执行防盗链验证。使用AccessKey等签名方式的API调用(即请求包含
Authorization标头)不受防盗链规则限制。名单大小限制:Referer白名单和黑名单的总数据大小不能超过20 KB。
生效范围:防盗链规则在Bucket级别生效,无法为Bucket内的特定文件或目录单独配置不同规则。
常见问题
配置防盗链后为何未生效?
请按以下顺序排查:
浏览器环境检查:某些特定浏览器环境(如微信小程序、iframe等)可能修改或设定特定的Referer值。通过OSS实时日志或浏览器开发者工具查询请求的实际Referer值,然后重新配置防盗链规则。
Referer格式规范:确认填写的Referer是否规范。来自浏览器的请求通常带有
http://或https://协议前缀,如果配置时遗漏协议部分,则无法正确匹配请求。CDN缓存绕过:如果使用CDN加速OSS且未在CDN配置防盗链,可能导致通过CDN访问时绕过验证。请在CDN上配置与OSS一致的防盗链规则。
微信小程序中访问OSS资源提示拒绝访问如何解决?
微信小程序发起的请求具有固定的Referer格式,通常为https://servicewechat.com/开头。在防盗链白名单中添加*servicewechat.com规则即可兼容所有小程序的访问需求。
浏览器地址栏直接访问文件提示拒绝访问如何解决?
直接在浏览器地址栏访问属于空Referer请求。如果防盗链配置为不允许空Referer,此类访问会被拒绝。若需支持直接访问,请将防盗链配置中的空 Referer选项修改为允许。
保存配置时出现InlineDataTooLarge错误如何处理?
此错误表示配置的Referer名单(白名单和黑名单合计)总大小超过了20 KB限制。建议使用通配符合并多条相似规则,或删除不必要的规则条目以减小配置大小。