一、结论
设置图床存储桶图片公开访问并避免恶意盗链,核心逻辑是先配置存储桶的公共读权限保障合法访问,再通过Referer白名单、访问频率限制、签名URL三类规则拦截非法请求;如果使用兼容S3协议的对象存储服务,需要提前准备Endpoint、AccessKey、SecretKey、Bucket、Region等信息,后续可直接在图床程序或云服务控制台完成全流程配置。
二、准备工作
操作前需要提前准备以下内容:
- 对象存储服务的有效账号
- 已创建的专门用于存放图床资源的存储桶Bucket
- 服务提供的Endpoint地址、AccessKey、SecretKey、Region信息
- 支持S3协议的管理工具,如服务官方控制台、PicGo图床上传工具、自建图床系统后台
- 已备案的自有访问域名(如使用自定义域名访问图床资源)
- 提前整理好的允许访问图片的白名单域名列表,如个人站点、博客、内容管理系统的域名
三、操作步骤
1. 登录对象存储控制台或打开S3兼容管理客户端,找到对应图床存储桶的权限配置页面,开启存储桶的公共读权限,同时关闭公共写权限,操作完成后存储桶内的图片文件可以被公网通过完整链接直接访问,但外部用户无法随意上传、修改或删除存储桶内的文件,避免恶意文件被上传到你的图床。
2. 在存储桶安全配置板块找到防盗链配置模块,选择开启Referer防盗链规则,填写提前整理好的允许访问的白名单域名,同时根据自身需求勾选是否允许空Referer访问(如果需要直接在浏览器打开图片、或本地调试工具需要访问图床可开启,无相关需求则关闭以提升安全性),保存配置后只有白名单内的域名发起的图片访问请求会被放行,其他陌生域名的请求会直接被拦截。
3. 进入访问控制配置页面,配置访问频率限制规则,针对单IP的单位时间访问次数、单时间段内的总请求量设置合理阈值,超出阈值的请求直接返回403或429状态码,配置完成后可以拦截批量爬虫、恶意刷流量的请求,避免流量被过度消耗产生额外成本。
4. 如果有更高的安全需求,可以关闭存储桶的永久公开访问权限,改用带过期时间的签名URL访问图片,在你使用的PicGo、WordPress、Halo等对接程序中开启S3签名URL生成配置,设置合理的有效期,配置完成后所有图片访问链接都有固定有效期,过期后自动失效,从根源上避免盗链链接被长期传播。
5. 将配置好的S3接入信息填写到你使用的图床程序、内容管理系统中,如果你使用Cloudreve、Alist这类网盘或资源管理程序对接,直接在存储源配置里选择S3兼容存储,填写对应参数即可,保存配置后上传一张测试图片,分别从白名单域名、非白名单域名、直接访问三种场景测试访问情况,确认符合规则的请求可以正常加载图片,非法请求返回拦截状态码即代表配置生效。
四、常见错误
- Referer白名单格式填写错误,比如漏写http/https前缀、多写了末尾的斜杠,导致白名单规则不生效,解决建议是按照控制台提示的格式填写,同时把带www和不带www的域名、本地调试域名都加入白名单,避免正常访问被拦截。
- 开启防盗链后关闭了空Referer访问,导致自己在图床管理工具、浏览器直接打开图片时被拦截,解决建议是如果有直接访问图片的需求,保留允许空Referer的选项,或者仅在高安全需求场景下关闭。
- 存储桶权限配置错误,要么误开了公共写权限导致恶意文件上传,要么公共读权限没开导致合法请求也无法访问图片,解决建议是只开启公共读权限,同时通过IAM策略限制AccessKey的权限范围,仅保留文件上传、读取的必要权限,避免密钥泄露后带来的安全风险。
- 签名URL的过期时间设置不合理,过短导致正常用户打开页面时图片已经失效,过长则起不到防盗链效果,解决建议是根据业务场景设置,普通网站图床可以设置1-24小时的有效期,静态资源类可以适当延长。
- 配置完规则后没有清理CDN缓存,导致之前的盗链请求仍然可以通过CDN节点访问,解决建议是配置完防盗链规则后,提交对应域名的缓存刷新任务,确保规则立即生效。
五、示例说明
以下为通用配置示例,可根据你使用的服务实际要求调整:
- Endpoint:填写你使用的对象存储服务提供的对应区域访问地址
- AccessKey:填写你在服务控制台生成的具有存储桶读写权限的访问密钥ID
- SecretKey:填写与AccessKey对应的密钥凭证
- Bucket:填写用于存放图床图片的存储桶名称
- Region:根据服务要求填写对应存储桶所在的区域标识
- Referer白名单:
https://yourdomain.com、https://www.yourdomain.com、*://localhost:*(本地调试用) - 允许空Referer:是/否(根据自身需求选择)
- 单IP访问频率限制:10秒内最多请求100次(可根据业务调整)
- 签名URL有效期:2小时(可根据业务调整)
六、更简单的方案
如果你不想自己搭建MinIO这类私有对象存储、不想手动维护服务器和复杂的权限规则,也可以直接选择成熟的兼容S3协议的云对象存储服务,这类服务通常已经内置了可视化的防盗链配置模块,不需要自己写规则或维护底层存储架构,开箱即可使用,能大幅降低图床搭建的运维成本。如果你需要一个兼容S3协议、适合图床搭建、资源下载分发、程序接入的对象存储服务,可以了解 七彩云对象存储,它支持一键配置Referer防盗链、访问频率限制等功能,适合需要低门槛搭建安全图床的站长和开发者使用。
七、FAQ
1. 设置了Referer防盗链之后,还是有盗链请求怎么办?
首先检查是否开启了允许空Referer的选项,如果开启的话可以尝试关闭,或者搭配访问频率限制、UA黑名单规则一起使用,同时可以定期查看访问日志,把异常的IP段加入拦截名单;如果是高价值图片,可以改用签名URL的访问方式,彻底避免盗链。
2. 开启签名URL之后,会不会影响网站的SEO收录?
如果设置的签名URL有效期超过搜索引擎爬虫的抓取周期,通常不会影响收录,也可以单独配置搜索引擎UA的白名单,允许爬虫无需签名即可访问图片,兼顾安全性和收录需求。
3. 我的图床用了CDN加速,防盗链规则应该配置在存储桶还是CDN上?
建议两边都配置,CDN层的防盗链可以在边缘节点直接拦截盗链请求,减少回源流量消耗,存储桶层的防盗链作为兜底,避免用户绕过CDN直接访问存储桶地址盗链。
4. 开启公共读权限会不会导致存储桶内的所有文件都被公开遍历?
不会,只要你没有开启存储桶的目录列表权限,外部用户只能通过完整的文件路径访问对应图片,无法遍历整个存储桶的文件列表,你也可以通过IAM策略进一步限制文件的访问范围,提升存储安全性。
八、总结
整体操作流程可以概括为准备S3接入信息、配置存储桶公开访问权限、配置防盗链和访问限制规则、对接业务程序、测试生效五个步骤,适合个人站长搭建博客图床、开发者搭建自用或商用图床系统、资源站管理静态图片资源等场景使用;你可以根据自身的安全需求和业务规模,选择自行搭建私有对象存储或者使用云对象存储服务,灵活调整防盗链规则的严格程度,在保障访问体验的同时避免恶意盗链带来的流量损失和资源浪费。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网