You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Azure Blob资源仅允许特定Referer域名访问

Azure Blob 存储防盗链配置指南(仅自有域名可访问资源)

Referer白名单方案可以拦截90%以上的普通直链盗链、社交平台直接分享链接访问的场景,配置成本最低;如果需要防恶意伪造Referer的爬取,再叠加SAS签名方案即可。

前置注意事项

不要把Blob容器设为全公共匿名访问,同时要在存储账户防火墙中配置为仅允许你绑定的CDN服务实例访问,禁止公网直接直连Blob原始存储端点,否则盗链者绕开CDN直接访问源站地址,所有防盗链规则都会失效。

方案一:Azure CDN 规则引擎配置(推荐,适配你当前CDN使用场景)

你当前已经把Blob作为CDN源站使用,直接在CDN层做Referer拦截是最简便、生效最快的方案:

  • 登录Azure门户,进入你绑定Blob存储作为源站的CDN配置页面
  • 找到规则配置入口:微软标准版CDN叫「标准规则集」,Akamai/Verizon版CDN叫「规则引擎」,新建一条优先级最高(序号最小)的规则
  • 配置请求匹配条件:
    • 第一个条件选Referer字段,匹配逻辑设为「不包含以下值」,值列表填入你的业务域名,必须带协议前缀,比如https://www.yourdomain.com、https://yourdomain.com,本地调试需要的话可以额外加http://localhost
    • 第二个条件选Referer字段,匹配逻辑设为「为空」,用来拦截直接在地址栏输入资源链接、部分无Referer跳转的访问场景
    • 两个条件的匹配逻辑设为「满足任意一个即触发操作」
  • 配置触发后的执行动作:选择「拒绝请求」,返回403状态码即可,不需要额外返回内容
  • 保存规则,等待CDN全网节点生效,一般最长等待10分钟即可

方案二:无CDN场景下的原生配置(不推荐,灵活性差)

如果你没有在Blob前面套CDN,直接暴露Blob端点对外提供服务,需要两步配置才能实现基础拦截:

  • 进入存储账户的「CORS 资源共享」配置页,针对Blob服务新增跨域规则:
    • 允许的源:仅填写你的业务域名,禁止填*通配符
    • 允许的方法:仅勾选GET、HEAD(只读资源不需要其他方法权限)
    • 允许的请求标头、暴露的响应标头可填*,缓存有效期按需设置为3600秒即可
  • 注意:单独配置CORS只能拦截浏览器的跨域调用,无法拦截直接地址访问,你需要额外在存储账户前绑定Azure Front Door服务,通过Front Door的规则集做Referer白名单判断,逻辑和上文CDN规则配置一致。

增强安全方案:SAS令牌动态签名(防Referer伪造)

Referer字段本身可以被恶意工具伪造,如果你的资源敏感度较高,建议叠加SAS签名鉴权:

  • 将Blob容器的访问级别改为「私有(无匿名访问)」,彻底禁止公网无权限访问源站
  • 业务服务端在渲染页面时,动态生成带时效的SAS签名拼接在资源URL后,签名仅授予读权限、设置较短的有效期(比如2小时),可按需限制可访问的IP范围
  • 就算资源链接被泄露,签名过期后URL会自动失效,无法继续访问

配置后有效性验证

配置完成后必须做以下校验,避免规则误拦截自身业务:

  • 正常访问你的业务站点,打开F12开发者工具看图片、音频等Blob资源的请求状态,返回200即为正常
  • 直接把资源链接复制到浏览器地址栏打开,返回403即为拦截生效
  • 用命令行模拟空Referer请求测试:curl -I 你的资源URL,确认返回403
  • 模拟其他域名Referer请求测试:curl -I -e "https://third-party.com" 你的资源URL,确认返回403

内容的提问来源于stack exchange,提问作者Pawel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:24:28