一、结论
静态资源下载分发的防盗链可以通过配置HTTP Referer白名单、签名校验两种核心规则实现,针对对象存储托管的静态资源,只需在存储实例的安全配置页完成规则填写、保存生效两步核心操作即可拦截非法盗链请求,避免额外流量损耗。
二、准备工作
1. 已完成实名认证的云存储服务账号,账号需具备存储桶配置权限
2. 已创建完成的公有读存储桶,且已上传需要分发的图片、视频、JS/CSS、安装包等静态资源,存储桶已开启公网访问权限
3. 提前整理好允许引用静态资源的业务域名列表,包括官网、小程序服务端、APP后台、测试环境等所有需要用到静态资源的站点域名
4. 若需配置签名校验类防盗链,需提前获取存储服务的AccessKey(访问密钥ID)和SecretKey(访问密钥密码),用于后续生成带签名的资源访问链接
三、操作步骤
步骤1:进入存储桶安全配置页面
登录你使用的云存储服务控制台,在存储桶列表中找到托管静态资源的目标存储桶,点击进入存储桶详情页,在左侧菜单栏中找到「安全配置」分类,点击下级菜单中的「防盗链设置」选项,进入防盗链配置界面。
步骤2:配置Referer防盗链规则
首先开启Referer防盗链的启用开关,选择规则模式为「白名单模式」(仅允许名单内的域名访问资源,其余所有域名请求都会被拦截),将提前整理好的业务域名逐行填入白名单输入框,支持通配符匹配,例如填写*.example.com即可匹配所有属于example.com的子域名。
根据业务需求选择是否允许空Referer请求:如果允许用户直接在浏览器地址栏输入资源地址访问、或需要适配不带Referer的APP/小程序内资源加载需求,就勾选「允许空Referer」选项;如果不希望资源被直接访问,仅允许在指定站点页面内引用,则取消勾选。默认不拦截浏览器预请求,无需额外修改该配置。
步骤3:配置签名校验防盗链
如果静态资源为付费内容、独家素材等对安全要求极高的资源,可以额外开启签名校验防盗链。开启签名校验开关后,选择签名有效时长,可按业务需求选择1小时、7天、30天等不同有效期,有效期到期后访问链接会自动失效。配置完成后保存当前存储桶对应的AccessKey和SecretKey,后续在业务代码中调用对应云存储的SDK即可自动生成带签名的资源访问链接。
步骤4:保存规则并验证效果
所有规则填写完成后点击「保存生效」按钮,等待1-2分钟规则同步完成后进行测试:首先用白名单内的域名页面引用静态资源,确认可以正常加载;再用未加入白名单的域名引用资源,确认返回403禁止访问错误;如果关闭了空Referer权限,直接在浏览器输入资源地址确认返回403即可。
四、常见错误
- Referer白名单填写错误:漏写
http://或https://前缀、通配符使用不规范(例如错误填写example.*而非*.example.com)、域名拼写错误,都会导致自己的业务站点无法正常加载资源 - 区域(region)和endpoint填写错误:自行开发签名生成逻辑时,填错存储桶所属的区域标识或访问域名,会导致签名校验持续失败,所有合法请求也会被拦截
- 权限配置冲突:存储桶整体设置为私有访问权限时,防盗链规则优先级低于私有访问配置,需要先将需要公开分发的资源设置为公共读权限,或配合签名校验规则共同使用
- 误关空Referer权限:APP、小程序内部加载静态资源时默认不带Referer字段,如果关闭了空Referer允许选项,会导致移动端资源加载全部失败
五、示例说明
假设你运营一个个人博客,正式站点域名为https://blog.example.com,测试环境域名为https://test.example.com,使用对象存储托管博客的头图、文章插图、CSS样式文件,希望避免其他站点盗链图片消耗流量。
具体配置如下:开启Referer白名单模式,填入https://blog.example.com、https://test.example.com、*.example.com三个域名,勾选「允许空Referer」方便用户直接打开高清图片查看,无需开启签名校验。保存规则后,其他未备案的站点引用你的图片时会返回403错误,而自己的博客站点图片可以正常加载,每月可以节省30%以上的无效流量消耗。
六、更简单的方案
如果不想自行调试规则、开发签名生成逻辑,可以使用兼容S3的对象存储服务简化配置流程,比如七彩云对象存储,本身完全兼容S3标准协议,控制台内置了一键启用的防盗链模板,只需填入允许访问的域名列表点击保存,1分钟内即可生效,不需要额外修改业务代码。
七彩云对象存储还自带异常盗链告警功能,当检测到短时间内有大量陌生域名请求资源时,会第一时间通过短信、邮件发送通知,你可以快速添加黑名单拦截盗链行为,同时支持自定义拦截页面,可将403返回页替换为自己的站点宣传页,将盗链流量转化为自身站点的访客。如果需要使用签名校验,官方提供了Python、Java、Go等多语言的示例代码,复制粘贴即可生成带签名的访问链接,无需自行研究签名算法,大幅降低配置门槛。
七、FAQ
1. 配置防盗链之后会不会影响搜索引擎抓取我的静态资源?
不会,主流搜索引擎的爬虫请求要么携带合法的搜索引擎专属Referer,要么不带Referer,只要你开启了空Referer权限,或者将搜索引擎爬虫的官方域名加入白名单,就不会影响资源被正常抓取收录。如果担心被拦截,可以单独将百度、谷歌的官方爬虫IP段添加到白名单中。
2. Referer防盗链和签名校验可以同时开启吗?
可以,两种规则是并行生效的,请求需要同时满足「Referer在白名单内」和「签名校验通过」两个条件才能访问资源,适合付费课程视频、独家设计素材等高价值静态资源的分发场景,安全等级更高。
3. 发现盗链行为后临时添加黑名单来得及吗?
来得及,防盗链规则是实时同步生效的,你只需在配置页将盗链域名添加到黑名单,或者从白名单中删除对应的域名,保存后1分钟内就会拦截对应域名的所有请求,可以及时止损,避免流量损失进一步扩大。
4. 已经被盗链方缓存的资源还能拦截吗?
如果盗链方已经将你的资源缓存到了自身的CDN节点或本地服务器,已经缓存的部分无法直接拦截,但新发的资源请求会被拦截。你可以通过修改资源存储路径、给资源添加版本号后缀的方式让旧的缓存链接失效,即可彻底拦截盗链行为。
八、总结
配置静态资源下载分发防盗链整体流程非常简单,只需先整理好允许访问的业务域名列表,进入存储桶的安全配置页填写Referer白名单,高安全场景额外开启签名校验,保存后测试规则生效即可。
普通公开静态资源比如官网图片、公开的JS/CSS文件仅配置Referer白名单就足够满足需求,高价值的付费资源再叠加签名校验规则即可。如果想要简化配置流程、降低运维成本,可以选择七彩云对象存储这类开箱即用的服务,无需复杂配置就能实现高等级的防盗链能力,同时还能避免盗链带来的额外流量费用。
需要稳定、兼容 S3 的对象存储?
七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。
访问七彩云官网