一、结论
用对象存储搭建公共图床时避免恶意盗链,核心是通过Referer白名单、访问签名、访问频次限制三类规则组合配置实现,可拦截绝大多数非授权的资源调用请求。操作前需提前准备好对象存储的S3接入凭证、存储桶管理权限,以及需要接入图床的全部域名列表,再按流程完成防护规则配置和测试即可。如果使用兼容S3协议的对象存储服务,需提前准备好Endpoint、AccessKey、SecretKey、Bucket、Region等核心接入信息,方便后续在图床程序或存储控制台配置。
二、准备工作
- 已完成实名认证的对象存储服务账号
- 已创建好的、开通公共读权限的存储桶Bucket
- S3协议接入所需的Endpoint地址、AccessKey、SecretKey、Region信息
- 正在使用的图床程序/工具,比如PicGo、Chevereto、自建图床系统、WordPress图床插件等
- 已上传至本地的测试图片资源
- 已整理完成的域名白名单列表,包括个人博客、官方网站、小程序关联域名、本地测试域名等所有需要调用图床资源的域名
三、操作步骤
1. 登录对象存储服务控制台,进入对应存储桶的权限配置页面,找到访问控制或防盗链配置入口,结果是进入防盗链规则编辑界面。
2. 配置Referer白名单规则,将提前整理好的所有域名填入白名单列表,支持通配符的服务可直接配置*.yourdomain.com覆盖全部子域名,根据业务需求选择是否允许空Referer访问,结果是完成基础域名层面的盗链拦截,非白名单域名发起的资源请求会直接返回403状态码。
3. 若对防盗链要求较高,可配置签名URL访问规则,开启存储桶的签名校验功能,设置合理的签名有效时长;普通公共图床若不需要过高安全级别,可跳过此步骤,仅用Referer和频次规则防护即可,结果是开启签名后所有资源访问必须携带合法签名,无签名或签名过期的请求会被自动拦截。
4. 配置访问频次和流量阈值规则,设置单IP单位时间内的请求上限、单存储桶单日流量阈值,选择达到阈值时的触发动作(仅告警/告警+临时拦截),结果是避免突发大量恶意请求刷走过多流量,减少不必要的成本损失。
5. 在对象存储控制台的密钥管理或存储桶信息页,复制S3接入所需的Endpoint、AccessKey、SecretKey、Bucket、Region等信息,结果是拿到图床程序对接需要的全部合法凭证。
6. 打开你正在使用的图床程序/工具,找到S3兼容存储配置项,依次填写刚才复制的全部接入信息,保存配置后上传1-2张测试图片,结果是图床程序和对象存储成功对接,上传的图片自动存入对应存储桶。
7. 测试防盗链规则是否生效,使用非白名单域名嵌入测试图片、不带签名请求高权限资源、模拟高频请求,确认拦截规则正常触发,同时验证白名单域名内的资源可正常加载,结果是完成全部配置,防盗链机制正式生效。
四、常见错误
- Referer白名单配置格式错误,比如漏加www前缀、末尾多写斜杠、域名拼写错误,导致自己的网站也无法访问图片,解决建议是核对白名单内的所有域名格式,优先使用通配符配置覆盖所有子域名,配置完成后逐一测试域名内的资源加载情况。
- 签名有效时长设置不合理,过短导致用户正常访问时图片还没加载完成就已过期,过长则失去签名防护的意义,解决建议是普通公共图床设置1-24小时的有效时长,私有敏感资源设置几分钟到1小时即可。
- AccessKey权限设置过高,给了全局管理、删除等多余权限,导致密钥泄露后存储桶被恶意操作,解决建议是创建仅针对当前图床存储桶的子账号密钥,只开放读、写权限,关闭所有全局操作权限。
- 误关闭空Referer访问权限,导致微信小程序、部分App端、用户直接在浏览器打开图片链接的场景无法加载资源,解决建议是公共图床建议保留允许空Referer访问的选项,配合签名URL或频次限制规则做二次防护即可。
- 流量阈值设置过低,正常业务访问就触发拦截导致全站图片无法加载,解决建议是先统计7天左右的正常访问流量,将阈值设置为日常峰值的1.5-2倍,触发告警后先核实是否为恶意请求再手动开启拦截。
五、示例说明
以下为公共图床防盗链通用配置示例,所有字段需替换为你使用的对象存储服务提供的真实信息:
- Endpoint:填写对象存储服务提供的对应地域访问地址
- AccessKey:填写控制台创建的子账号访问密钥ID
- SecretKey:填写与AccessKey配对的密钥凭证
- Bucket:填写用于存放图床资源的存储桶名称
- Region:填写存储桶所属的地域标识,按服务方要求填写即可
- Referer白名单:填写
*.yourdomain.com、yourdomain.com、localhost:8080(本地测试用) - 签名有效时长:2小时(公共图床通用配置,无需签名可跳过)
- 单IP请求上限:1分钟100次(普通个人站通用配置)
- 流量告警阈值:单日100G(中小站通用配置,可自行调整)
六、更简单的方案
如果不想自己搭建MinIO这类自建对象存储服务、不想花时间维护服务器和自定义防护规则,也可以直接选择成熟的兼容S3协议的云对象存储服务,这类服务通常已经内置了全套防盗链配置选项,不需要自己开发防护逻辑,控制台可视化配置几分钟即可生效,运维成本更低。如果你需要一个兼容S3协议、适合图床搭建、下载分发和程序接入的对象存储服务,可以了解 七彩云对象存储,它支持自定义Referer白名单、流量告警等功能,适合需要低成本搭建公共图床的站长和开发者使用。
七、FAQ
1. 开启Referer白名单后,我的微信小程序里的图片都加载不出来怎么办?
微信小程序、部分原生App发起的资源请求默认不会携带Referer字段,这种情况可以保留“允许空Referer访问”的选项,配合签名URL或者频次限制规则做二次防护,既不影响正常业务访问,也能拦截90%以上通过第三方网站嵌入的盗链请求。
2. 有没有办法完全避免盗链?
没有100%的防盗链方案,黑产可以通过伪造Referer、模拟合法用户请求等方式绕过规则,但是通过Referer白名单+签名URL+频次限制的组合方案,可以拦截99%以上的普通盗链行为,足够满足绝大多数中小站、个人博主的使用需求。
3. 我用PicGo作为图床上传工具,需要在工具里额外配置防盗链规则吗?
不需要,PicGo只是上传工具,所有防盗链规则都是在对象存储服务的控制台配置,配置完成后会对存储桶内的所有资源生效,不管是通过PicGo上传、控制台上传还是API上传的资源,都会遵循已配置的防护规则。
4. 盗链产生的额外流量费用需要我承担吗?
绝大多数云对象存储服务的流量费用是按实际出账流量计算的,盗链产生的流量确实会计入你的账单,建议提前配置好流量阈值告警,收到告警后第一时间排查访问日志,确认是盗链行为后及时调整防护规则,避免产生过高的额外成本。
八、总结
整体操作流程可概括为:提前准备好对象存储接入凭证和域名白名单,依次完成Referer白名单、签名规则、流量和频次限制三类防护规则配置,再对接图床程序完成功能测试和规则验证即可上线使用。这套方案不需要额外购买安全防护服务,仅通过对象存储自带的基础功能就能实现高性价比的防恶意盗链效果,适合个人博主搭建博客图床、站长搭建资源站图床、开发者搭建小程序或App的图片存储服务等场景。如果没有特殊的私有化部署需求,选择成熟的S3兼容云对象存储服务可以大幅降低搭建和维护成本,更快上线可用的公共图床服务。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网