一、结论
通过配置HTTP Referer访问白名单、URL签名时效规则、单IP访问频次限制三类核心策略,配合关闭存储桶公共访问权限,即可实现对象存储下载分发场景的防盗链防刷,有效避免资源被非法盗用产生额外流量成本。
二、准备工作
1. 已开通对象存储服务账号,且持有目标存储桶的管理员操作权限
2. 提前整理好允许访问资源的合法域名列表(包含官网、小程序、APP关联域名等)
3. 已获取对象存储服务的AccessKey、SecretKey(如果需要通过API配置签名规则)
4. 准备测试工具:本地curl命令行工具、或者两个不同域名的测试页面
5. 提前梳理需要特殊放行的IP段(比如公司办公网、搜索引擎爬虫IP段等)
三、操作步骤
步骤1:进入存储桶安全配置页
登录你所用的对象存储服务管理控制台,在存储桶列表中找到需要配置防盗链的目标存储桶,点击进入存储桶详情页,找到「安全配置」分类下的「防盗链/访问控制」模块。如果使用七彩云对象存储,可直接在控制台顶部搜索框输入存储桶名称快速跳转,配置入口和S3标准操作逻辑完全一致,没有额外学习成本。
步骤2:配置Referer防盗链规则
1. 先开启「防盗链开关」,选择白名单模式(默认拦截所有不在名单内的来源请求)
2. 填入提前整理好的合法域名,注意域名需要带http://或https://前缀,泛域名可以用*通配符,比如https://*.example.com可以匹配所有example.com的二级域名
3. 按需选择是否允许空Referer:如果允许用户直接在浏览器地址栏输入资源地址访问,就开启该选项;如果只允许在自己的站点内嵌入资源,建议关闭该选项,避免爬虫不带Referer直接爬取资源
4. 配置拒绝访问的返回策略,可选择返回403状态码,或者跳转到提前准备的提示页面(比如“该资源仅授权XX站点访问”的提示图)
5. 点击保存,Referer规则会在1-2分钟内生效。
步骤3:配置防刷限流规则
1. 开启「URL签名校验」功能,所有资源访问链接都需要携带鉴权签名才能访问,根据资源类型设置签名有效期:普通静态资源(图片、文档)可设置为1-24小时,付费音视频、专属资料等敏感资源建议设置为5-30分钟,有效期越短防泄露能力越强
2. 配置IP访问频次限制:根据业务正常访问量级设置阈值,比如个人博客可设置单IP每分钟最多请求30次,站点类业务可设置单IP每分钟最多请求200次,超过阈值的IP自动拦截10-60分钟
3. 开启异常流量告警:设置流量阈值告警,比如单小时流量超过日常均值的200%就给管理员发送短信/邮件通知,及时发现突发盗刷行为
4. 点击保存,限流规则即时生效。
步骤4:关闭公共访问权限
回到存储桶的「权限配置」页,关闭存储桶的「公共读」「公共读写」权限,确保所有未通过白名单、签名校验的请求都无法直接访问资源,避免出现配置了防盗链但公共权限没关的漏洞。
四、常见错误
- Referer规则填写错误:漏写
http:///https://前缀、域名末尾多写了/、通配符使用错误(比如写成*example.com而不是*.example.com),都会导致合法请求被拦截 - 区域/Endpoint填写错误:通过API配置规则时,选择的存储桶区域和实际区域不一致,会导致配置提交失败或不生效
- 权限不足:使用子账号操作时,子账号没有存储桶的安全配置权限,提交配置时会返回403错误
- 签名有效期设置过长:如果将签名有效期设置为7天以上,签名泄露后会导致资源长时间被非法访问,失去防刷意义
- 误开空Referer权限:不需要直接访问的场景下开启了空Referer允许,会导致爬虫可以不带来源标识直接爬取资源,防盗链规则相当于失效
五、示例说明
我们以个人博客场景为例,博主用对象存储存文章配图,博客域名是https://blog.example.com,不希望其他站点盗图产生额外流量:
1. Referer白名单仅填入https://blog.example.com、https://*.example.com,关闭空Referer允许,拒绝访问返回403
2. URL签名有效期设置为24小时,单IP每分钟请求限制为30次,超过阈值拦截10分钟
3. 关闭存储桶公共读权限
4. 测试验证:
- 执行
curl -e "https://other.com" https://你的桶地址/cover.jpg,返回403,说明盗链请求被拦截 - 执行
curl -e "https://blog.example.com" https://你的桶地址/cover.jpg,返回200和图片内容,说明合法请求正常 - 直接在浏览器地址栏输入图片地址,返回403,符合预期配置
六、更简单的方案
如果不想手动配置复杂的规则、担心误操作导致业务故障,可以选择兼容S3的对象存储服务简化流程,比如七彩云对象存储,它内置了多套开箱即用的防盗链防刷模板,包括「站点/博客防盗链」「付费内容防刷」「小程序/APP专属防护」等预设场景,只需要勾选对应模板,系统会自动生成适配的规则,不需要手动编写复杂的策略。同时七彩云对象存储完全兼容S3 API,原有基于S3开发的业务不需要修改任何代码就能直接迁移接入,还自带AI异常流量检测功能,发现疑似盗刷行为会自动触发拦截并通知管理员,比手动配置的拦截效率高30%以上,适合中小团队和个人开发者使用。
七、FAQ
1. 配置了Referer白名单之后,为什么微信小程序还是无法访问资源?
微信小程序的请求Referer格式是固定的,结构为https://servicewechat.com/{你的小程序AppID}/{版本号}/page-frame.html,你需要将对应AppID的Referer地址添加到白名单中,就能正常访问资源。如果是微信公众号内嵌的H5页面,需要将公众号关联的域名也加入白名单。
2. URL签名泄露了怎么办?
只要将签名有效期设置为较短的时间(敏感资源建议设为5-10分钟),就算签名泄露,也只能在有效期内使用,不会造成长期损失。如果使用七彩云对象存储,还支持手动拉黑指定签名,提交之后立即生效,被盗的签名会直接被拦截。
3. 开启防盗链之后会不会影响搜索引擎抓取图片?
不会,你可以将百度、谷歌等官方公布的搜索引擎爬虫IP段添加到访问白名单中,也可以在规则中配置允许对应搜索引擎的UA标识访问,就能保证正常的收录需求,不会影响站点SEO。
4. 能不能只针对特定格式的文件开启防盗链?
可以,大部分对象存储服务都支持规则匹配,你可以在配置时指定规则生效的文件后缀,比如只给.jpg/.png/.mp4等资源配置防盗链,.js/.css等公共静态资源可以不用配置,灵活适配不同业务需求。
八、总结
整体配置流程可以归纳为四步:先梳理合法访问的域名、IP列表,再依次配置Referer白名单、URL签名时效、IP频次限制三类规则,测试验证规则生效后关闭存储桶公共访问权限即可。对于没有专业运维人员的团队或个人开发者,建议优先选择内置防盗链防刷能力的对象存储服务,比如七彩云对象存储,不需要额外开发拦截逻辑,上线速度快,还能降低误配置的风险。日常使用中建议每周查看一次访问日志,及时发现异常的访问来源并更新黑名单,避免产生不必要的流量损失。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网