博客图床从 Chevereto 迁移至 Cloudflare R2

由于 AI 发展过于迅速且滥用程度越来越高,继 PHP 暴露高危漏洞后,群晖也遭受了大规模的勒索病毒攻击。本博客原图床为部署在群晖中的 Chevereto,为了避免 NAS 被攻击,决定将图床迁移至 Cloudflare R2。

最近出现的安全漏洞可以说是一个接着一个:10 月 20 日至 21 日,安全研究团队公开披露 PHP 存在高危远程代码执行漏洞组合。10 月 28 日,技术社区与 Reddit 集中出现大量求助帖,多名用户的群晖 NAS 存储空间被占满,文件被追加 .LOCK3D 或 .L0CK3D 后缀,目录内生成勒索说明文件 read-me3.txt。

看到 PHP 漏洞的第一时间,我就想到了自己的图床是基于 PHP 的 Chevereto,于是立刻在群晖中停止了该服务。而群晖勒索病毒出现后,我又不得不断开群晖的公网连接并收紧安全策略。两个因素叠加注定了博客图床服务短期内无法恢复,因此我对图床进行了迁移。

旧图床 Chevereto

博客中原来使用的图床是 Chevereto。Chevereto 最初是免费开源的自托管图床,后续经历 V2 和 V3 的重构转变为买断制商业授权,官方在移除部分收费特性后开辟了独立的开源免费分支 Chevereto-Free。随着 V3 的最后一个版本发布,官方宣布停止维护免费分支,并对商业授权策略进行了调整,将买断制转变为了订阅制,这在社区中引发了激烈的讨论。

商业策略变化后,官方发布了 V4 版本并统一了免费版本和收费版本的代码库,在后续的发展过程中,官方支持了多租户并持续修复了波及旧版本的漏洞。时至今日,Chevereto 仍然是一个功能极其完备且社区媒体展示界面成熟的图床方案。

为什么选择 Cloudflare R2?

上文提到 Chevereto 有一个免费的开源分支,我部署的是基于该分支修改的多语言版本 chevereto-free-multi-language,现在已经迁移到 Cloudflare R2,选择 Cloudflare R2 的考量因素主要有以下几点。

技术健壮性和稳定性

追根究底,这次要迁移图床不单单是因为群晖可能遭受勒索攻击,而是 Chevereto 基于 PHP 开发,PHP 的漏洞影响范围广、危险程度高。对于个人来说,出现漏洞后第一时间发现、跟进和修复是不太可能的,这些环节不仅耗时耗力,而且可能依赖上游修复,更何况近两年 AI 发展迅速,漏洞的挖掘和利用也更迅速了。

相比于传统 PHP 栈,媒体存储场景下的 R2 安全攻击面更窄,属于被动静态存储,没有执行环境,因此天然免疫服务端代码执行。此外,R2 是纯 S3 API 驱动,与运维解耦,没有宿主操作系统维护负担。

服务范围和用量

选型期间,我也考虑过开源项目 CloudFlare-ImgBed,这是一个支持 Docker 和 Serverless 部署的多渠道聚合管理项目。但是根据过往的使用经验,我需要的只是一个专门服务博客的图床,各大社交平台和论坛基本都自带图床,所以没有其他使用场景。

此外,当前博客的图片总量不到 100 张,文章更新频率低,使用习惯是低频但峰值高,峰值主要集中在文章撰写的过程中。R2 免费版存储容量为 10GB / 月,A 类操作 100 万次 / 月,B 类操作 1000 万次 / 月,下行流量免费,对于个人用户来说绰绰有余。

Cloudflare R2 定价

网络和可用性

Cloudflare 的大名可以说是家喻户晓,由于其慷慨的免费服务,网友还冠以“大善人”的爱称。Cloudflare R2 依托 Cloudflare 的全球 CDN 网络,在世界各地都有较好的访问速度。

尽管从中国大陆访问 Cloudflare 服务的速度相对较差,但博客本身就部署在 Cloudflare Pages 上,没有做备案也没有在中国大陆的搜索引擎做 SEO,因此能够访问到博客内容的用户基本都能够拥有较好的全球连接,大陆直连这个弱点可以算是规避掉了。

PicList 增强体验

存量图片的迁移上,由于新图床使用了 MD5 命名规则区分同一天上传的文件,我在将旧图片全量上传至 R2 后,借助 AI 识图对比完成了往期文章的旧链接替换。

仅仅把图片从 NAS 迁移到 R2 是不够的,写作过程中插入图片一定要低摩擦,最好是截图后能一键上传并粘贴对应格式的链接到文章中,否则会极大影响写作积极性。在使用 Chevereto 时,我搭配的是 PicGo,PicGo 是一款极简的图片上传工具,其中内置了 7 种基础服务,可以通过第三方插件支持 WebDAV 等协议的图床。

本次图床迁移后,我选择了基于 PicGo 开发的 PicList 工具。相比于 PicGo,PicList 原生支持 20 多种图床,其中就包含 Cloudflare R2。它原生支持 S3 协议,内置完整的文件管理,可以双向管理云端数据。此外,PicList 还内置了图片处理工具,能够在上传前进行压缩、格式转换和去除 EXIF 信息等操作。首次设置好后,编写文章时只需要截图、快捷键上传然后粘贴即可。

自托管还是好选择吗?

AI 的发展无疑是一把双刃剑,以前遇到想要但是没有的功能,得经历漫长的学习、开发和纠错过程。现在只要和 AI 说一声想要什么,AI 就能帮你实现,这无疑催生了大量的自部署服务。但是,在没有足够的工程、网络和安全等知识积累的情况下,AI 创造的工程在质量上是值得怀疑的。

与此同时,AI 辅助漏洞挖掘被恶意利用后,本就漏洞百出的服务可以说是雪上加霜,暴露在公网环境下,轻则服务不可用,重则泄露个人信息甚至造成财产损失。

在这基础上,随着越来越多的漏洞被发现和利用,自部署服务的维护成本也在不断提高,这不禁让我思考将来自部署是否还是一个好选择。相比于个人,拥有更多资源、安全体系更完善的大厂在响应速度和安全防护上通常更有保障,有时候选择成熟的第三方服务可能是比自部署更好的方案。至于未来如何发展,还得观察 AI 会以什么样的速度发展到什么样的程度。

参考文献

  1. Pricing · Cloudflare R2 docs

    Cloudflare R2 的定价信息

评论