防盗链

更新时间:
复制为 MD 格式

OSS资源被其他网站非法引用导致流量费用激增时,可以通过配置Referer黑白名单来限制资源的访问来源,防止资源被盗用。

工作原理

当浏览器向OSS请求文件时,HTTP请求的Referer标头会标识发起请求的源页面URL。OSS通过校验Referer值来判断请求来源的合法性,基于预设规则允许或拒绝访问。

配置防盗链后,OSS按照以下优先级顺序执行访问控制判断:

  1. Referer检查:OSS首先判断请求的Referer字段是否为空。如果为空,按以下逻辑判断:

    • 允许空Referer:请求通过。

    • 不允许空Referer且白名单为空:请求通过。

    • 不允许空Referer且白名单不为空:请求拒绝。

    如果Referer不为空,继续下一步检查。

  2. 黑名单检查:OSS检查请求的Referer是否匹配黑名单。匹配到任意一项则立即拒绝,不再检查白名单;未匹配则继续下一步检查。

  3. 白名单检查:OSS检查请求的Referer是否匹配白名单。匹配成功则请求通过,未匹配到任何一项则请求拒绝。

配置方式

  1. 前往Bucket列表,单击目标Bucket。

  2. 在左侧导航栏选择数据安全 > 防盗链,启用防盗链选项,按照需求配置Referer规则:

    • 白名单 Referer:允许访问的域名列表,每行一个。

    • 黑名单 Referer:禁止访问的域名列表,每行一个。黑名单优先级高于白名单。

    • 空 Referer:是否允许不带Referer的请求(如直接在浏览器地址栏访问)。

    • 截断 QueryString:是否在匹配时忽略URL?之后的查询字符串,详见QueryString解析规则

    Referer规则支持通配符:

    通配符

    说明

    示例

    *

    代替0个或多个字符

    *.example.com可匹配http://www.example.comhttps://help.example.com

    ?

    代替1个字符

    http://www.aliyun?.com可匹配http://www.aliyunc.com

    Referer规则也支持带端口的域名或IP地址,如http://www.example.com:808010.10.10.10:8080

    说明

    匹配时不忽略协议(Scheme),配置http://www.aliyun.com不能匹配https://www.aliyun.com。建议同时添加HTTPHTTPS版本。

  3. 单击保存,完成设置。

场景示例

仅允许受信任的网站访问

通过白名单机制仅允许指定网站访问OSS资源,同时支持用户直接通过浏览器访问。

步骤一:获取Referer

配置前需获取访问OSS资源的请求来源Referer:

  • 通过OSS实时日志:前往Bucket列表,在目标Bucket日志管理 > 实时查询中查找referer字段,显示为-表示空Referer。

  • 通过浏览器开发者工具:按F12打开开发者工具,在网络面板中查看请求的Referer标头。

步骤二:配置Referer规则

配置项

配置值

说明

白名单 Referer

https://www.aliyun.com
http://www.aliyun.com
*.console.aliyun.com

添加信任的网站域名,建议同时添加HTTPHTTPS版本。添加控制台域名确保管理功能正常。

黑名单 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

*bad-site.example
http://malicious-site.example
https://malicious-site.example

禁止的恶意网站域名,使用通配符可禁止整个域名及其子域名。

空 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

*servicewechat.com
*.console.aliyun.com

使用通配符兼容所有微信小程序的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

*.console.aliyun.com

使用通配符兼容所有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

https://www.example.com
http://www.example.com
*.console.aliyun.com

业务网站域名,根据实际情况添加所有需要支持的域名和协议组合。添加控制台域名确保管理功能正常。

黑名单 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.txt

QueryString解析规则

如果设置不允许截断QueryString,OSS将按照以下规则解析:

规则

说明

不解码QueryString

请求URLhttp://www.example.com/?job_id=task$01时,白名单或黑名单设置为http://www.example.com/?job_id=task%2401无法匹配。

忽略参数大小写

请求URLhttp://www.example.com/?ACTION=NOP时,白名单或黑名单设置为http://www.example.com/?action=nop可以匹配。

不解析参数顺序

请求URLhttp://example.com/?b=c&a=b时,白名单或黑名单设置为http://example.com/?a=b&b=c无法匹配。

应用于生产环境

  • 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内的特定文件或目录单独配置不同规则。

常见问题

配置防盗链后为何未生效?

请按以下顺序排查:

  1. 浏览器环境检查:某些特定浏览器环境(如微信小程序、iframe等)可能修改或设定特定的Referer值。通过OSS实时日志或浏览器开发者工具查询请求的实际Referer值,然后重新配置防盗链规则。

  2. Referer格式规范:确认填写的Referer是否规范。来自浏览器的请求通常带有http://https://协议前缀,如果配置时遗漏协议部分,则无法正确匹配请求。

  3. CDN缓存绕过:如果使用CDN加速OSS且未在CDN配置防盗链,可能导致通过CDN访问时绕过验证。请在CDN上配置与OSS一致的防盗链规则。

微信小程序中访问OSS资源提示拒绝访问如何解决?

微信小程序发起的请求具有固定的Referer格式,通常为https://servicewechat.com/开头。在防盗链白名单中添加*servicewechat.com规则即可兼容所有小程序的访问需求。

浏览器地址栏直接访问文件提示拒绝访问如何解决?

直接在浏览器地址栏访问属于空Referer请求。如果防盗链配置为不允许空Referer,此类访问会被拒绝。若需支持直接访问,请将防盗链配置中的空 Referer选项修改为允许

保存配置时出现InlineDataTooLarge错误如何处理?

此错误表示配置的Referer名单(白名单和黑名单合计)总大小超过了20 KB限制。建议使用通配符合并多条相似规则,或删除不必要的规则条目以减小配置大小。