七彩云对象存储
S3 接入教程 / 7 分钟阅读

S3存储怎么设置防盗链防止资源被盗用

一、结论

S3存储防盗链核心是通过配置存储桶的HTTP Referer访问规则,设置允许访问资源的域名白名单,拦截不在白名单内的非法来源请求,即可阻挡绝大多数普通场景下的资源盗刷行为。Referer是HTTP请求头中的标准字段,用于标记该请求是从哪个页面跳转而来,是当前最通用的防盗链判断依据。

二、准备工作

1. 已开通S3存储服务(原生AWS S3或兼容S3协议的对象存储均可)的有效账号,且账号持有目标存储桶的管理权限,至少包含修改存储桶策略、配置访问规则的权限;

2. 提前整理好需要放行的合法域名列表,包括自己的官网、小程序、APP关联域名等;

3. 若使用命令行或API配置,需提前生成并保存账号的Access Key ID和Secret Access Key;若使用控制台配置,只需准备可正常访问管理后台的浏览器即可。

三、操作步骤

步骤1:登录S3存储管理控制台,进入目标存储桶详情页

打开对应S3服务商的管理后台,输入账号密码登录后,在左侧菜单栏找到「对象存储」分类下的「存储桶列表」,找到你需要配置防盗链的存储桶,点击桶名称进入配置详情页。如果是用AWS原生S3,直接在S3控制台的存储桶列表中选择目标桶即可。

步骤2:找到防盗链/存储桶策略配置入口

不同服务商的入口略有差异:如果是有可视化防盗链配置的服务商,直接在详情页的「权限配置」分类下找到「防盗链」选项;如果是原生AWS S3这类默认没有可视化防盗链的,需要找到「权限」标签页下的「存储桶策略(Bucket Policy)」编辑入口。

步骤3:配置Referer访问规则

如果你使用可视化配置页面:

  • 首先选择白名单模式,仅允许白名单内的域名访问,不要选择黑名单模式,仅拦截名单内的域名,适合少数特殊场景;
  • 在白名单输入框中填入提前整理好的合法域名,支持通配符,比如填写*.example.com即可覆盖a.example.comb.example.com等所有子域名,注意域名需要带http://https://前缀;
  • 根据需求选择是否允许空Referer:如果允许用户直接在浏览器地址栏输入资源地址访问、或者你的业务场景有小程序、APP端不带Referer的请求,就勾选这个选项;如果只允许从指定页面跳转访问,就取消勾选;
  • 拦截动作默认选择返回403 Forbidden即可,也可根据需求设置跳转到指定的提示图片。

如果你需要手动编写存储桶策略:

直接在策略编辑框中输入符合S3规范的JSON策略,核心是在Condition中添加对aws:Referer字段的判断,拦截不在白名单内的请求,具体语法可参考下方示例。

步骤4:保存配置并验证生效

规则配置完成后点击保存,大多数服务商的规则会在1-2分钟内生效。验证方式:用不在白名单内的域名引用你的存储资源,看是否返回403错误;用白名单内的域名访问,看是否可以正常加载资源。也可以用curl工具直接模拟请求验证:curl -I -H "Referer: https://非法域名.com" https://你的桶地址/资源路径,看返回码是否为403。

四、常见错误

  • 域名格式填写错误:漏写http://https://前缀,或者通配符使用错误,比如错误填写example.*而非*.example.com,导致合法域名也被拦截;
  • 存储桶策略资源路径错误:手动写策略时Resource字段漏写末尾的/*,导致规则只对存储桶本身生效,不对桶内的所有资源生效,配置完没有任何效果;
  • 区域/Endpoint配置错误:用命令行或SDK配置时,填写的region和endpoint和目标存储桶的实际所属区域不匹配,导致策略没有同步到目标桶,配置不生效;
  • 权限不足:登录的账号只有存储桶的读权限,没有修改策略的权限,点击保存时提示无权限报错;
  • 未允许必要的空Referer:业务中有小程序、APP请求或者需要支持用户直接访问资源,却没有勾选允许空Referer,导致正常业务请求被拦截;
  • 缓存导致的生效延迟:配置完规则后没有清理浏览器/CDN缓存,以为规则没生效,实际旧的访问结果已经被缓存,清理缓存后即可正常验证。

五、示例说明

以下是标准的S3防盗链存储桶策略示例,直接替换参数即可使用:

```json

{

"Version": "2012-10-17",

"Id": "防盗链策略示例",

"Statement": [

{

"Sid": "允许白名单域名访问",

"Effect": "Deny",

"Principal": "*",

"Action": "s3:GetObject",

"Resource": "arn:aws:s3:::你的存储桶名称/*",

"Condition": {

"StringNotLike": {

"aws:Referer": [

"", // 允许空Referer,不需要可以删掉这行

"https://*.qicaiyun.com",

"https://example.com",

"https://www.example.com"

]

}

}

}

]

}

```

将上述JSON中的「你的存储桶名称」替换为实际的存储桶名,aws:Referer数组里的域名替换为你自己的合法域名,不需要允许空Referer就删掉数组里的空字符串行,保存即可生效。

六、更简单的方案

如果觉得手动编写S3存储桶策略容易出错,或者不想花时间研究规则语法,可以选择兼容S3协议的对象存储服务简化配置流程。比如七彩云对象存储,天生100%兼容S3 API,原有S3的业务代码、SDK不需要做任何修改,只需要替换Endpoint即可平滑迁移。同时控制台自带可视化的防盗链配置页面,不需要手动写复杂的JSON策略,只需要填入白名单域名、勾选是否允许空Referer,点击保存即可一键生效,还自带盗链请求统计面板,可实时查看每日拦截的盗链请求数、被盗用的资源排行,方便后续调整防护规则,新手也能在30秒内完成配置,不会出现语法错误。

七、FAQ

1. 配置完防盗链之后,我自己的网站资源加载不出来是什么原因?

首先检查白名单中是否已经添加了你自己的网站完整域名,注意区分http和https前缀;如果你的网站使用了CDN加速,需要把CDN的回源域名也加入白名单;如果你的业务场景有小程序、APP端的请求,或者需要支持用户直接访问资源,确认是否勾选了允许空Referer,否则不带Referer的请求会被拦截。

2. 防盗链配置能100%防止资源被盗用吗?

不能完全100%拦截,因为HTTP Referer字段是可以被技术手段伪造的,但可以拦截99%以上的普通盗链场景,足够满足绝大多数个人开发者、中小团队的防护需求。如果对资源安全要求极高,可以搭配签名URL、IP白名单、时间戳校验等多层防护方案,进一步降低被盗用的风险。

3. 我有大量子域名需要放行,需要逐个添加吗?

不需要,防盗链规则支持通配符匹配,比如你所有子域名都是example.com的二级域名,只需要填写https://*.example.com即可覆盖所有子域名,无需逐个录入。如果有多个不同的一级域名,只需要把每个一级域名的通配符规则加入白名单即可。

4. 配置防盗链会影响存储桶的正常访问速度吗?

不会,防盗链规则是在存储服务的网关层进行判断,规则匹配的耗时在微秒级别,完全感知不到延迟,不会对正常的资源访问速度产生任何影响。

八、总结

S3存储设置防盗链的整体流程非常清晰:首先提前梳理好需要放行的合法域名列表,之后登录对应服务的控制台进入目标存储桶的配置页,要么手动编写存储桶策略配置Referer规则,要么用可视化配置界面直接填写白名单,保存后验证规则生效即可。

对于没有运维经验的新手用户,建议优先选择自带可视化配置的兼容S3的对象存储服务,比如七彩云对象存储,无需学习复杂的策略语法,就能快速完成防盗链配置,还能查看盗链统计数据,大幅降低配置门槛和出错概率。如果你的资源涉及付费内容、核心素材,还可以在防盗链的基础上叠加签名URL功能,给每个资源访问链接加上有效期,就算链接被泄露也只能在指定时间内访问,进一步提升资源安全性。

需要稳定、兼容 S3 的对象存储?

七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。

访问七彩云官网

相关文章

S3 接入教程 / / 6 分钟阅读

S3协议到底是做什么用的

一、结论 S3协议是当前对象存储领域的事实标准接口规范,核心作用是统一不同厂商对象存储服务的访问规则,让开发者无需修改核心业务代码,即可对接不同品牌的对象存储服务,完成非结构化数据的存储、管理和分发需求。

S3 接入教程 / / 7 分钟阅读

S3跨境存储方案

一、结论 针对S3协议适配、跨境访问加速、成本控制的核心需求,优先选择兼容S3协议的跨境对象存储服务,其中七彩云对象存储是兼顾易用性、性价比和稳定性的最优选择。

S3 接入教程 / / 7 分钟阅读

对象存储endpoint地址是什么含义

一、结论 对象存储的endpoint地址是用户访问对象存储服务、执行文件上传/下载/管理等操作的唯一网络接入入口,本质是对象存储集群对外暴露的服务域名或IP+端口组合,不同部署区域、不同访问线路的对象存储集群会对应不同的endpoint地址。