如何阻止其他域名获取Azure Blob存储中的图片?配置CORS后Postman与本地仍可访问图片是否正常?
关于Azure Blob存储CORS规则与访问控制的问题解答
嘿,这个问题其实挺典型的,我来帮你拆解清楚~
一、配置CORS后仍能访问图片是正常的吗?
答案是完全正常,因为你可能对CORS的作用范围有点误解:
CORS(跨域资源共享)本质上是浏览器的安全机制,它的作用是限制浏览器端脚本(比如fetch、XMLHttpRequest)发起的跨域请求,而不是限制所有对Blob资源的访问。具体到你的场景:
- Postman能访问:Postman不是浏览器,它不会执行浏览器的同源策略和CORS检查,只要你的Blob是公开可访问的,它就能直接请求到资源,和CORS规则无关。
- 本地网页能显示图片:如果是用
<img>标签直接加载图片,这属于浏览器的“简单请求”范畴,浏览器不会触发CORS预检,也不会因为跨域而阻止图片显示——CORS规则在这里限制的是脚本去读取图片的内容(比如用canvas处理图片),而不是限制图片本身的展示。
简单说:CORS是用来允许特定域名的脚本跨域访问资源的,不是用来阻止其他域名访问资源的。
二、如何阻止其他域名获取Azure Blob存储中的图片?
要实现这个需求,你需要用到Azure Blob的访问控制机制,而不是CORS。这里有几个常用方案:
1. 将Blob设置为私有,使用SAS令牌授权访问
这是最常用的方式:
- 首先修改容器的访问级别:把容器从“公开读取”改成“私有”,这样默认情况下任何人都无法直接访问Blob。
- 生成SAS(共享访问签名)令牌:可以针对单个Blob、整个容器生成SAS,设置过期时间、允许的IP范围、允许的HTTP方法等。只有持有有效SAS令牌的URL才能访问对应的Blob。
- 在你的信任域名(比如
www.abc.com)的网页中,使用带SAS的URL加载图片,其他域名无法获取到有效SAS,自然无法访问。
2. 配合Azure CDN配置域名白名单
如果你的Blob需要通过CDN加速,可以在CDN层做访问控制:
- 将Azure Blob存储作为CDN的源站。
- 在CDN的规则引擎中配置允许的来源域名,只添加你信任的域名(比如
www.abc.com),这样其他域名发起的请求会被CDN直接拒绝,无法到达Blob存储。
3. 使用Blob存储防火墙限制IP访问(可选)
如果你的访问来源IP是固定的,可以配置Blob存储的防火墙规则:
- 在Blob存储的“网络”设置中,添加允许访问的IP地址范围,这样只有来自这些IP的请求才能访问Blob。不过这个方案是基于IP的,不是基于域名的,适合固定办公网络等场景。
注意事项
- 不要依赖CORS来阻止资源访问:CORS的核心是“允许”而非“禁止”,即使配置了严格的CORS规则,只要Blob是公开的,任何人都能通过直接访问URL获取资源。
- 私有Blob+SAS是最灵活的方案:既可以控制访问时效,也能限制访问范围,适合大多数网页场景。
内容的提问来源于stack exchange,提问作者JustFun2020
相关产品推荐
相关产品推荐

