一、结论
配置对象存储防盗链防止流量被盗,核心是通过设置Referer白名单校验、URL签名认证两类核心规则,配合存储桶权限管控实现,通常需要先获取存储桶的管理权限,完成规则配置后多场景验证生效即可拦截非法盗链请求。如果通过S3接口批量配置规则,需要提前准备Endpoint、AccessKey、SecretKey、Bucket、Region等接入信息。
二、准备工作
- 对象存储服务的管理员账号权限(可操作存储桶配置)
- 已经创建完成并投入使用的目标存储桶Bucket
- (通过API配置规则时需准备)S3接入信息:Endpoint、AccessKey、SecretKey、Region
- 提前整理允许访问资源的域名白名单(自有网站、小程序、CDN回源域名等)
- 明确业务是否需要支持空Referer访问(比如用户直接在浏览器输入资源地址的场景)
- (配置签名防盗链时需准备)业务服务端开发环境,用于集成S3签名生成逻辑
- 不同来源的测试环境(比如非白名单域名的测试页面、本地调试环境等)
三、操作步骤
1. 登录对象存储管理控制台,进入目标存储桶的配置页面,找到「防盗链」「访问控制」或「Referer配置」相关的功能入口,结果是进入防盗链规则编辑界面。如果习惯用API操作,也可以调用S3协议的PutBucketReferer接口进入配置流程,适合批量管理多个存储桶的开发者使用。
2. 根据业务场景选择防盗链实现方式:面向公开静态资源(图片、网站附件、公开视频等)优先选择Referer校验,配置成本低无需额外开发;面向付费资源、私密文件、大文件下载等高价值资源优先选择签名URL校验,安全性更高无法轻易绕过,结果是确定适配自身业务的防盗链方案。
3. 若选择Referer校验规则:首先设置是否允许空Referer访问,再按格式添加提前整理好的域名白名单(支持通配符匹配多级域名),最后设置非法请求的返回码(通常为403 Forbidden),结果是Referer基础规则配置完成。如果有部分路径不需要校验防盗链,可以单独添加例外路径规则。
4. 若选择签名URL校验规则:首先在存储桶权限设置中关闭公共读权限,开启「访问需携带签名」的配置,再根据S3协议的V4签名规范,在业务服务端集成签名生成逻辑,按业务需求设置签名的过期时间,结果是所有资源访问必须携带合法签名才能通过校验。
5. 确认所有配置项无误后保存规则,等待配置生效,大部分服务商的规则生效时间为1-10分钟,结果是防盗链规则正式部署到对象存储的边缘节点。
6. 多场景测试规则有效性:使用非白名单域名嵌入资源、不带签名访问私有资源,确认返回预设的拦截错误码;再使用白名单域名、携带合法签名访问资源,确认资源可以正常加载或下载,结果是验证防盗链规则符合预期,没有误拦截或漏拦截的情况。
7. 后续根据业务新增的域名、新的资源场景,定期更新防盗链规则,结果是适配业务迭代后的防盗链需求。
四、常见错误
- Referer白名单配置遗漏协议头:比如只填写了
www.7caiyun.com未填写https://www.7caiyun.com,导致合法域名的请求也被拦截,解决方法是配置时明确带上http/https协议头,需要同时兼容两种协议的可以分别添加或用通配符适配。 - 错误关闭空Referer权限:导致用户直接在浏览器输入资源地址、微信等内置环境打开资源时被拦截,解决方法是面向公众的公开静态资源建议开启允许空Referer的选项,私密资源可以关闭该权限提升安全性。
- 签名URL过期时间设置不合理:过期时间太短会导致用户打开大文件到一半链接就失效,太长则失去防盗链意义,解决方法是根据资源大小设置有效期,普通图片建议设置10-30分钟,GB级大文件下载建议设置1-2小时。
- 存储桶权限与防盗链规则冲突:比如存储桶开启了公共读权限,即使配置了签名校验也不会生效,解决方法是配置签名防盗链前先关闭存储桶的公共访问权限,确保权限规则优先级高于公开访问。
- 遗漏CDN回源域名:配置Referer白名单时没有添加CDN的回源域名,导致CDN回源时被对象存储拦截,前端资源无法正常加载,解决方法是把自身使用的CDN回源域名也加入Referer白名单。
五、示例说明
Referer防盗链通用配置示例
- 允许空Referer:是
- 白名单域名:
https://*.yourdomain.com、https://your-cdn-domain.com - 拦截返回码:403
- 例外路径:
/public/*(该路径下的所有资源不校验防盗链,允许任意来源访问)
签名防盗链通用配置示例
- 存储桶权限:私有读
- 签名算法:S3 V4签名
- 签名默认过期时间:1800秒(30分钟)
- 业务逻辑:用户请求资源时,服务端按照S3签名规范拼接资源路径、过期时间、密钥等参数生成合法签名,拼接成完整的访问URL返回给前端,前端通过该URL访问资源。
六、更简单的方案
如果不想自己搭建私有对象存储(比如MinIO)、不想花时间调试复杂的防盗链规则和权限配置,也可以选择已经原生集成防盗链功能、兼容S3协议的商用对象存储服务,不需要额外开发就能快速配置Referer校验、签名URL等防盗链能力。如果你需要一个兼容S3协议、适合网站静态资源存储、图床、下载站分发、支持一键配置防盗链的对象存储服务,可以了解 七彩云对象存储,它支持不限流量的下载分发,适配各类站长和开发者的资源存储需求。
七、FAQ
配置了Referer防盗链之后,为什么我自己的网站也打不开图片?
首先检查白名单里是否添加了自己的网站域名,注意要带完整的http/https协议头,如果使用了CDN加速,还要把CDN的回源域名也加入白名单;其次确认是否误关了空Referer权限,如果你的网站有场景需要用户直接打开资源地址,建议开启允许空Referer的选项。
Referer防盗链和签名防盗链哪个更安全?
Referer防盗链配置简单、无额外开发成本,适合公开的静态资源场景,但存在Referer被伪造的低风险;签名防盗链安全性更高,无法通过伪造参数绕过,适合付费资源、私密资源、大文件下载等高价值资源的防盗场景,但需要在业务服务端额外开发签名生成逻辑。
防盗链配置后多久生效?有没有办法立即验证?
大部分对象存储服务的防盗链配置生效时间在1到10分钟不等,配置后可以先清除本地浏览器缓存,用非白名单域名的测试环境访问资源,如果返回403错误说明规则已经生效;如果配置后超过15分钟还未生效,可以联系服务商确认配置是否正确提交。
我有部分公共资源需要所有人都能访问,能不能不做防盗链?
可以,大部分对象存储服务都支持配置防盗链的例外路径,你可以把不需要校验的公共资源放在统一的目录下,在防盗链规则里把该路径设置为例外即可,不需要单独拆分存储桶。
八、总结
整体来看,对象存储防盗链的配置逻辑并不复杂,核心是根据自身的业务场景选择合适的防盗链方式,按步骤配置后做好多场景验证即可有效避免流量被盗产生的额外成本。这套配置方式适用于网站附件存储、图床、视频托管、下载站资源分发等各类对象存储使用场景,无论是自建对象存储还是使用商用云存储服务,都可以参考这套流程完成防盗链配置。如果使用支持S3协议的存储服务,还可以通过API批量配置多个存储桶的防盗链规则,大幅提升运维效率。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网