一、结论
设置对象存储公开图片不被盗刷,核心是通过权限控制、访问限制、链路校验三层规则组合实现,无需关闭公开访问权限即可在保障正常业务访问的前提下拦截恶意盗刷请求。如果你使用的是兼容S3协议的对象存储服务,提前准备好Endpoint、AccessKey、SecretKey、Bucket、Region等信息,即可快速完成全流程配置。
二、准备工作
- 拥有存储桶配置权限的对象存储管理员账号
- 已创建的用于存放公开图片的存储桶Bucket
- 对应对象存储服务的Endpoint访问地址
- 拥有存储桶配置权限的AccessKey与SecretKey
- 服务对应的Region地域标识
- 支持S3协议的控制台、API调试工具或对应网站/图床/内容管理系统的后台管理员权限
- 至少1张已上传的测试用公开访问图片,用于验证配置效果
三、操作步骤
1. 登录对象存储控制台,进入目标存储桶的基础权限配置页面,将存储桶公开访问权限调整为「仅公共读、禁止公共写」,结果是保障图片仅可被未授权用户读取,不会被篡改或上传违规内容,避免基础权限漏洞。
2. 找到防盗链配置模块,开启Referer白名单限制,添加自身业务域名、本地调试域名、CDN回源域名到白名单,若有移动端直接访问图片的需求可勾选「允许空Referer访问」,无该需求可关闭该选项,结果是只有白名单内的域名发起的请求可以正常获取图片,其他站点直接引用链接会返回403错误。
3. 开启时间戳签名校验功能,根据业务场景设置签名有效期(普通图文站点建议设置为24小时,敏感资源可设置为1-2小时),同步获取签名加密密钥与规则,结果是所有图片访问链接都需要携带有效签名,超过有效期的链接自动失效,就算被爬虫抓取也无法长期盗用。
4. 可选配置IP访问限制规则,若业务面向固定地区或固定IP段用户,可添加允许访问的IP白名单,或直接封禁异常请求频次较高的IP段,结果是直接拦截非目标用户的IP请求,进一步降低盗刷风险。
5. 配置流量阈值告警,设置单小时/单日流量超出日常流量2-3倍时,通过短信、邮件或办公机器人给管理员发送通知,结果是就算有漏网的盗刷请求,也能第一时间收到预警及时处理,避免产生高额费用。
6. 保存所有配置后,分别用白名单域名、非白名单域名、过期签名链接、陌生IP访问测试图片,确认符合预期的访问规则,结果是确保配置生效,正常业务访问不受影响,恶意请求被拦截。
7. 若使用PicGo、WordPress、Halo、Cloudreve等程序对接存储桶,需要在程序的S3存储配置模块同步更新签名生成规则,结果是程序生成的图片链接自动携带有效签名,业务侧无需手动调整即可正常输出可访问的图片地址。
四、常见错误
- Referer白名单配置时漏加CDN域名或移动端Webview域名,导致正常用户访问图片返回403,解决建议是梳理所有业务涉及的跳转域名、回源域名全部加入白名单,测试时覆盖PC、移动端、小程序等全场景。
- 时间戳签名的加密密钥与程序端配置不一致,导致程序生成的链接全部无效,解决建议是复制存储桶后台生成的签名密钥时避免多余空格,两端配置完成后先通过测试链接验证有效性再全量上线。
- 误操作关闭存储桶的公共读权限,导致所有图片无法访问,解决建议是仅调整防盗链、签名等上层规则,不要修改基础公共读权限,除非需要完全关闭资源的公开访问能力。
- IP规则配置时误将业务服务器IP、CDN回源IP加入黑名单,导致网站无法加载图片,解决建议是配置IP规则前先导出所有业务相关的IP段,优先添加白名单再配置拦截规则,避免误拦截。
- 签名有效期设置过短(如1分钟),导致用户打开页面时图片已失效,解决建议是根据页面平均停留时长设置有效期,普通站点设置2-24小时即可,敏感资源可根据需求调整。
五、示例说明
以下为通用配置示例,所有字段需替换为对应服务提供的真实信息:
- 基础S3接入配置:
- Endpoint:填写所属对象存储服务提供的访问地址
- AccessKey:填写拥有存储桶配置权限的访问密钥
- SecretKey:填写对应访问密钥的加密串
- Bucket:填写存放公开图片的存储桶名称
- Region:根据服务要求填写对应地域标识
- 防盗链配置:
- Referer白名单:*.yourdomain.com、localhost、127.0.0.1(根据实际业务调整)
- 允许空Referer:是(适配移动端直接访问场景)/否(仅允许网页引用场景)
- 签名配置:
- 签名算法:MD5/SHA256(根据服务支持选择)
- 有效期:86400秒(24小时)
- 签名参数名:sign、t(根据服务要求调整)
- 告警配置:
- 单日流量阈值:根据业务日常流量的2-3倍设置
- 告警通知渠道:短信、邮件、企业微信机器人等
六、更简单的方案
如果你不想自行搭建维护MinIO等自建对象存储服务,也不想花费大量时间调试复杂的权限规则,可以直接选择成熟的兼容S3协议的云对象存储服务,这类服务通常内置了可视化的防盗链、签名、流量告警配置模块,无需自行写代码开发规则,几分钟即可完成全流程配置。如果你需要一个兼容S3协议、适合图床、网站附件存储、下载分发的对象存储服务,可以了解 七彩云对象存储,它支持自定义防盗链规则和签名校验,适合需要控制访问权限、避免流量盗刷的站长和开发者使用。
七、FAQ
1. 开启防盗链之后搜索引擎的图片爬虫还能抓取我的图片吗?
如果你的站点需要被搜索引擎收录图片,可以将对应搜索引擎的爬虫域名或UA规则添加到白名单中,大部分主流对象存储服务都支持UA白名单配置,不会影响正常的搜索收录。
2. 我用了CDN加速对象存储的图片,防盗链应该配置在CDN侧还是存储桶侧?
建议优先配置在CDN侧,可以在边缘节点就拦截盗刷请求,减少回源流量,如果需要双重防护也可以同时在存储桶侧配置相同的规则,注意要把CDN的回源IP添加到存储桶的白名单中,避免CDN回源被拦截。
3. 时间戳签名会不会影响图片的缓存效果?
只要签名有效期设置合理,CDN可以正常缓存有效期内的图片资源,不会大幅降低缓存命中率,如果对缓存要求很高,可以适当延长签名有效期,平衡安全性和缓存效率。
4. 如果我有部分图片需要对外提供公开下载,不能加签名也不能限制Referer,怎么避免盗刷?
可以单独创建一个公共存储桶存放这类资源,配置流量阈值告警,同时设置单IP访问频次限制,就算被刷也能及时收到通知,避免产生过高的费用。
八、总结
整体操作流程可以归纳为准备S3接入信息、配置基础权限规则、添加防盗链和签名限制、配置流量告警、测试验证效果五个核心环节,这套方案既适合个人站长的图床、博客站点图片防护,也适合企业级资源站、素材站的公开资源盗刷防护,无需复杂的二次开发,按照步骤配置即可大幅降低流量盗刷风险,减少不必要的成本支出。如果是技术能力有限或者不想花费时间维护自建存储的用户,也可以直接选择成熟的云对象存储服务,快速完成配置上线。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网