一、结论
通过在对象存储存储桶的安全配置中添加Referer黑白名单规则,按需叠加URL时效签名校验,即可实现下载分发场景下的防盗链,有效避免资源被恶意盗用产生额外流量成本。
二、准备工作
1. 已注册对象存储服务账号,并且完成实名认证
2. 已创建用于资源分发的存储桶(Bucket),并上传了需要分发的目标资源
3. 整理好需要允许访问资源的业务域名清单(包含正式环境、测试环境等所有需要用到的域名)
4. 如果需要通过API配置或生成签名,提前在控制台获取AccessKey ID和AccessKey Secret
5. 准备好测试环境:比如不同域名的测试页面、本地浏览器环境,用于配置完成后验证规则
三、操作步骤
1. 进入目标存储桶的防盗链配置页面
首先打开你使用的对象存储服务商控制台,进入对象存储产品的管理页,在「存储桶列表」中找到你需要设置防盗链的目标存储桶,点击存储桶名称进入详情配置页,在左侧的导航栏中找到「安全配置」分类,点击下属的「防盗链设置」选项,进入配置界面。
2. 配置Referer访问规则
首先选择规则模式:大部分场景推荐选择「白名单模式」,即只有名单内的域名可以访问存储桶资源,适合自有站点资源的分发;如果是要封禁特定站点的盗用,可以选择「黑名单模式」。之后在规则输入框中填写提前整理好的业务域名,注意必须带完整的http/https前缀,比如https://www.example.com,如果需要覆盖所有二级域名,可以使用通配符,比如填写https://*.example.com即可匹配https://test.example.com、https://img.example.com等所有二级域名。接下来选择是否允许空Referer:如果允许用户直接在浏览器地址栏输入资源地址访问、或者允许微信小程序等不带Referer的场景访问,就勾选「允许空Referer」选项。最后设置不符合规则的请求返回码,一般选择403 Forbidden即可,配置完成后先不要保存,进入下一步。
3. 配置URL时效签名并保存生效
如果你的资源属于高价值付费资源、不允许被公开传播,可以开启「URL签名校验」功能,开启后所有访问请求必须携带符合算法要求的签名参数,且在设置的有效期内才能正常访问。你可以根据资源的价值设置签名有效期,比如付费视频可以设置为10分钟,普通付费素材可以设置为1小时。所有规则配置完成后,点击「保存」按钮,规则会在1-2分钟内生效。保存完成后,你可以用提前准备的测试环境验证规则:分别用白名单内的域名、白名单外的域名、直接输入地址、过期签名链接等场景测试,确认规则符合预期。
四、常见错误
- Referer规则填写不规范:比如漏写http/https前缀、多写了域名末尾的斜杠、通配符缺少前缀的点(比如错误填写
*example.com,正确应为*.example.com),导致合法请求被拦截 - 空Referer设置不符合预期:比如想要允许用户直接访问资源,却未勾选「允许空Referer」,导致用户直接在地址栏输入资源地址时返回403
- region或endpoint填写错误:通过API调用配置防盗链规则时,填写了错误的区域endpoint或者区域标识,导致配置没有同步到目标存储桶
- 账号权限不足:使用子账号操作时,该子账号没有目标存储桶的配置修改权限,提交规则时返回无权限报错
- 签名参数错误:生成带签名的下载链接时,资源路径填写错误、时间戳格式不对、签名算法逻辑错误,导致合法的签名链接也被拦截
- 跨域配置缺失:部分浏览器的CORS预检请求不会携带Referer头,如果没有提前配置存储桶的跨域CORS规则,会导致正常的前端跨域请求被拦截
五、示例说明
某自媒体创作者搭建了个人素材站,正式站点域名是https://www.zuozhe.com,测试环境域名是https://dev.zuozhe.com,同时希望用户可以直接在浏览器打开素材地址保存,不希望其他站点盗用自己的原创素材产生多余流量费。
配置过程如下:
1. 选择白名单模式,填写域名https://*.zuozhe.com,覆盖正式和测试环境的所有二级域名
2. 勾选「允许空Referer」,满足用户直接访问资源的需求
3. 因为素材都有版权,额外开启URL签名校验,设置有效期为2小时
验证结果:
- 从
https://www.zuozhe.com的页面调用素材可以正常加载 - 测试环境
https://dev.zuozhe.com的页面调用素材可以正常加载 - 直接在浏览器输入素材地址可以正常打开
- 其他站点比如
https://www.daoyong.com调用素材返回403错误 - 生成时间超过2小时的旧下载链接打开时返回403错误
完全符合预期的安全需求。
六、更简单的方案
如果觉得手动配置规则、编写签名生成算法的流程太繁琐,也可以使用兼容S3协议的对象存储服务简化配置流程。比如七彩云对象存储,完全兼容标准S3 API,现有基于S3协议开发的业务代码无需修改即可直接迁移,无需额外的适配成本。其控制台内置了多套防盗链场景预设模板,包含「公开站点资源防盗链」「私密付费内容分发」「仅允许特定站点访问」等常用场景,只需选择对应场景、填入自己的业务域名,点击一键生成即可完成规则配置,无需手动调试规则逻辑。同时控制台还自带可视化签名生成工具,只需选择资源、设置有效期即可自动生成合法的带签名下载链接,无需自行编写签名算法代码,大幅降低新手的配置门槛和出错概率。
七、FAQ
1. 我设置了Referer白名单之后,为什么自己的站点还是加载不了资源?
首先检查你填写的白名单域名是否和实际站点的域名完全匹配:需要确认http/https协议是否一致、域名是否完全对应,比如你的站点实际是https协议,白名单里填写的是http开头的域名就会不匹配。其次检查是否配置了存储桶的跨域CORS规则,部分浏览器的跨域预检请求不会携带Referer头,没有配置跨域规则的话会被拦截。如果还是异常,可以打开浏览器的开发者工具,查看网络请求的Referer头实际内容,和白名单配置对比即可找到问题。
2. URL签名的有效期设置多长比较合理?
可以根据资源的类型和安全要求灵活调整:公开的静态资源比如站点logo、公开文章配图,有效期可以设置为7-30天,减少链接更新的频率;付费类的资源比如付费课程视频、原创设计素材,建议设置为5-30分钟,尽可能降低链接泄露后被传播的风险,最长不建议超过30天。
3. Referer规则和URL签名可以同时开启吗?
可以,两者是叠加生效的,访问请求需要同时符合Referer规则、签名校验两个条件才能正常访问资源,适合对安全要求极高的场景,比如付费内容的专属分发、内部私密资料的共享等。
4. 开启防盗链之后会影响已经接入的CDN分发吗?
不会,你只需要把CDN服务商提供的回源域名、或者你自己的CDN回源Host添加到Referer白名单中即可,CDN回源时的请求会携带对应的Referer头,不会被防盗链规则拦截。
八、总结
整体来看,对象存储下载分发防盗链的配置流程并不复杂,核心就是先完成账号、存储桶、域名清单的准备工作,再进入对应存储桶的防盗链配置页,根据业务需求设置Referer黑白名单规则,按需叠加URL时效签名校验,最后完成多场景测试即可。
对于普通的个人站点、中小企业的资源分发场景,优先选择白名单模式+允许空Referer的配置,兼顾安全性和用户体验;如果是高价值的付费资源,建议叠加签名校验进一步提升安全性。如果想要降低配置难度、减少调试成本,可以优先选择七彩云对象存储这类兼容S3协议、自带场景模板的服务,上手更快,出错概率更低。配置完成后一定要用不同的访问场景反复测试,避免出现误拦截正常用户请求的问题。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网