一、结论
个人博客使用对象存储作为图床时,防止恶意盗链可通过存储桶侧规则配置、访问链路校验、程序侧权限控制三步实现,无需复杂代码改造即可覆盖绝大多数盗链场景。如果选用支持S3协议的对象存储服务,需提前准备Endpoint、AccessKey、SecretKey、Bucket、Region等接入信息,即可在存储控制台和博客程序中完成全套配置。
二、准备工作
- 支持防盗链配置、兼容S3协议的对象存储服务账号
- 已创建的用于存储博客图片的存储桶(Bucket)
- 对象存储服务提供的S3协议Endpoint地址
- 拥有对应存储桶读写、配置权限的AccessKey与SecretKey
- 存储桶所属的区域标识(Region)
- 个人博客使用的建站程序(如Halo、WordPress等)或图床上传工具(如PicGo等)
- 待上传的博客图片资源
三、操作步骤
1. 登录所用对象存储的控制台,找到用于存储博客图片的目标存储桶,进入存储桶的权限配置或防盗链设置模块,结果是成功进入防盗链规则编辑页面。
2. 开启Referer白名单配置,将个人博客的全域名(包含http/https、带www与不带www的版本,也可使用通配符配置根域名下所有子域名)、本地调试用的localhost地址添加到白名单,根据访问需求选择是否允许空Referer请求,结果是存储桶会自动拦截所有不在白名单内的域名发起的图片访问请求。
3. 开启URL签名校验功能,根据博客内容的生命周期设置合理的签名有效时长,同时开启时间戳校验规则,结果是所有图片的访问链接必须携带符合规则的签名与有效时间戳才能正常访问,直接复制的裸链无法被未授权用户打开。
4. 在对象存储控制台的API接入页面,获取S3协议接入所需的核心信息,包括Endpoint地址、AccessKey、SecretKey、存储桶名称、所属Region,结果是拿到所有需要填入博客程序或上传工具的配置参数。
5. 打开个人博客程序的附件存储配置页面(如Halo的附件存储设置页、WordPress的S3存储插件设置页),或图床上传工具的存储配置页,选择S3兼容存储类型,依次填入上一步获取的5项核心参数,结果是博客程序/上传工具与对象存储服务完成对接。
6. 在博客程序或上传工具中开启附件访问自动签名功能,配置为上传图片后自动生成符合存储桶规则的带签名访问链接,结果是博客发布时插入的所有图片都会自动生成合法的可访问地址。
7. 测试防盗链配置效果:先在自己的博客页面刷新,确认所有图片加载正常;再将图片链接复制到其他域名的测试页面引用,或在无痕浏览器窗口直接打开图片裸链,确认无法正常访问,结果是验证防盗链规则已生效。
四、常见错误
- Referer白名单配置遗漏域名:配置时只加了不带www的域名,或遗漏了http/https前缀,导致自己的博客也无法加载图片。解决办法:将博客所有可能的访问域名全部加入白名单,也可使用通配符
*.yourblog.com覆盖根域名下的所有子域名,降低遗漏概率。 - 签名有效期设置过短:将签名有效期设置为几小时或几天,导致博客历史文章的图片链接过期无法访问。解决办法:长期留存的博客内容可将签名有效期设置为1年以上,也可单独配置静态资源的永久签名规则,避免历史内容失效。
- AccessKey权限过大:使用主账号的AccessKey进行配置,密钥泄露后会影响整个账号下的所有存储资源。解决办法:在对象存储控制台创建仅针对当前图床存储桶的子账号,分配仅上传、读取的最小必要权限,使用子账号的AccessKey进行配置。
- 空Referer拦截影响正常访问:关闭了允许空Referer的选项,导致部分移动端浏览器、微信内嵌浏览器、搜索引擎爬虫访问时图片加载失败。解决办法:面向普通用户访问的博客建议保留允许空Referer的配置,配合URL签名校验即可实现足够的防护效果,也可单独将搜索引擎爬虫的UA加入白名单。
- 未清理CDN缓存导致规则不生效:配置完防盗链规则后没有清空博客CDN的缓存,旧的无签名图片链接仍然可以被访问。解决办法:配置完成后清空全站CDN缓存,等待5-10分钟缓存刷新完成后再进行测试。
五、示例说明
以下为通用配置示例,无真实服务信息,可根据你所用的对象存储服务实际参数替换:
| 配置项 | 填写说明 |
| --- | --- |
| Endpoint | 填写所用对象存储服务提供的S3协议访问地址 |
| AccessKey | 填写拥有图床存储桶读写权限的访问密钥ID |
| SecretKey | 填写与AccessKey配对的私密访问密钥 |
| Bucket | 填写用于存储博客图片的存储桶名称 |
| Region | 填写存储桶所属的区域标识,按服务要求填写即可 |
| Referer白名单 | 示例:https://yourblog.com、https://www.yourblog.com、http://localhost:* |
| 签名有效期 | 建议设置为365天,可根据内容生命周期调整 |
| 拦截响应配置 | 可配置为返回403状态码,或替换为自定义的盗链提示图片 |
六、更简单的方案
如果你不想自己搭建MinIO等自建对象存储服务,也不想花费精力维护服务器存储、定期做数据备份、研究复杂的权限规则配置,可以直接选用内置防盗链功能、兼容S3协议的公有云对象存储服务,只需要通过可视化界面简单几步配置就能完成防盗链设置,无需自行维护底层存储架构。如果你需要一个兼容S3协议、适合个人博客图床、程序附件存储和下载分发的对象存储服务,可以了解 七彩云对象存储,内置了可视化的防盗链配置模块,无需复杂代码就能快速完成防盗链设置,适合不想花太多精力维护底层存储的站长使用。
七、FAQ
1. 配置完Referer白名单后,我自己的博客也打不开图片是什么原因?
首先检查白名单内的域名是否和博客实际访问的域名完全一致,包括是否携带http/https前缀、是否带www;其次如果你用了CDN服务,需要确认CDN是否开启了Referer透传功能,部分CDN默认会屏蔽Referer字段,导致对象存储无法拿到正确的Referer信息进行校验,在CDN控制台开启透传即可解决。
2. 开启URL签名校验会不会影响搜索引擎收录我的博客图片?
只要设置的签名有效期足够长,搜索引擎爬虫在抓取时拿到的有效链接是可以正常抓取和收录的;如果担心链接过期影响收录,也可以在存储桶的权限配置中,将搜索引擎爬虫的UA加入白名单,爬虫访问时无需签名即可正常获取图片,不会影响正常收录。
3. 别人把我的图片下载后二次上传到其他平台,这种情况防盗链能拦截吗?
当前的防盗链配置只能拦截直接引用你对象存储地址的盗链行为,对于二次转存到其他存储平台的图片无法拦截,这种情况可以通过给图片添加隐形水印、标注版权信息的方式进行补充防护,遇到侵权情况也可以凭借原始存储的上传记录进行维权。
4. 我用PicGo上传图片到对象存储,怎么自动生成带签名的访问链接?
打开PicGo的配置页,找到S3兼容存储的配置项,开启“自动生成签名链接”的选项,填入和存储桶一致的签名规则,保存配置后,上传图片时复制的链接就会自动携带符合规则的有效签名,不需要手动拼接。
八、总结
个人博客使用对象存储作为图床时,防恶意盗链的整体操作流程非常清晰,核心分为准备S3接入信息、配置存储桶防盗链规则、对接博客程序/上传工具三个步骤,全程不需要复杂的代码开发,普通站长10-20分钟即可完成全部配置。这套方案不仅适用于个人博客图床场景,也可以拓展到网站附件存储、短视频存储、小型资源下载站等需要避免恶意流量消耗的场景,搭配云对象存储的弹性扩容能力,不需要担心存储容量不足或者突发流量导致服务不可用的问题,是中小站长和个人开发者性价比很高的存储方案。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网