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