直接选择加入静态博客大军
在四年半前,我首次建立了个博客站,使用的是Wordpress。它不仅管理方便,而且界面也算是能用,正逢大学期间已经逐渐熟悉环境,研究的内容逐步变多,需要这么一个可供记录的地方来整理与归档曾经踩过的地深坑。原本是可以一直这样使用下去的,特别是后续上了Markdown撰写方式结合页面Cache,即使是采用php后端的Wordpress也已经够用,直到一些事的发生,让我最终对Wordpress以及背后基于php的动态博客的维护不胜其烦,被迫停站一段时间后的再三考虑下,恰逢静态博客的时机已经逐步成熟,便开始着手迁移到静态博客,于是就有了这个:基于VuePress的新博客站。
起因
事情的起因是在2022年的1月份,有人反馈blog的地址被劫持重定向了,在微信公众号文章点击原文链接会被劫持跳转到一个陌生页面,当时我一头雾水,一开始以为是客户端受dns污染所致,后来又怀疑是装的某个插件有问题。



一开始是检查了下跳转的调用链,发现它在位于更底层的位置被重定向了,不像是我写的内容本身有啥问题或者漏洞。后来在提醒下,检查了下返回的渲染后的html,发现里面被直接插入了一端跳转script,应该就是根源所在了。

这插入的配置都跑到!DOCTYPE
标签外了,显然是干预了php页面渲染才能做到这种事,于是我首先怀疑是有一些恶意插件作祟,回忆了下想起来我这个页面之前为了加速渲染做了静态缓存,特别是当时手动清理缓存之后恢复正常的表现让我当时确信了这一点,于是便直指缓存插件。干掉缓存插件并更换了其他缓存插件之后,算是消停了一整子。
复发
但是这个问题一直萦绕在我心头,直到半年后,同样的问题又再一次复现了,迫使我不得不再继续查找资料寻求解决方案,看到了一个关于评论注入导致缓存插件渲染外部链接导致的漏洞。

最终这到底是WordPress的漏洞还是纯粹是结合其他插件导致的问题,其实我到最后尘埃落定时都没有弄清,因为我是没有打开评论功能的,或者说是开了评论但需要审核,于是乎就关掉了缓存用动态渲染硬跑,就这么迷迷糊糊地用了一段时间。
但事实证明拖延只会掩盖而不会解决问题,在23年的11月,它突然就发作了,在那一天中午收到了腾讯云的病毒告警。

我迅速评估了下受影响的情况,也不知道是不是引入了新的病毒,它基本上会通过主机的远程执行感染所有php文件,不过比较幸运的是,php-fpm
本身我用单独的www-data
用户执行,阻止了它大部分写入文件的尝试,但是最终还是导致它横向感染了一些同用户的web应用,包括两个php应用和一个纯web应用。我只好直接下线这两个应用,并且直接重装了整个Wordpress,纯web应用因为不存在远程执行的情况逃过一劫,从行为上来看,它似乎是遍历了一遍目录并尝试写入一个受感染的index.php
文件。就这样,事情它又告一段落了。
最后一根稻草
但恐怕是命运使然,接下来发生的事情甚至让我不得不被迫考虑更换技术栈这种问题了。
时间来到24年1月,我发现站点开始出现点击劫持这种问题了,我第一反应是不是什么CSS劫持,因为这种现象我之前也不少碰到过,查资料的时候进别人的博客站,然后只要你鼠标点击一下页面就会给你跳jd什么的,但是很显然发生在自己的站上面就不是很让人高兴了。
然后这么折腾下来,我开始考虑要不要放弃WordPress了,因为在此期间有个契机,就是在23年的10月-12月期间的项目中,有一个项目用到了静态博客站,现在这种博客站已经非常美观了,而且并不是纯静态的,其实它运行时是有vue支持的,硬要类比的话,它更像是吧SSR的页面提前渲染好拿过来用了(其实它内部的页面打包也基本上是这个思想)。这种特征让它既拥有静态页面安全可靠的基础上,也能实现丰富的自定义功能,已经可以这么考虑使用了,但是对当时的我而言,其实还只是想法并未想过付诸实施。
但是很快我就会改变想法了,因为当我这么想着去翻看目前为止已经发过的文章时,发现了一些比较恐怖的东西。

当时就给我整不会了,顺带一提Без рубрики
是“未分类”的俄语,但是它是怎么把这种内容注入进来的,能做到这种事,意味着它已经能获得对整个WordPress的控制权限了。对于当时的我也没有什么多想的余地,更何况到现在也难以排除出原因,于是我果断在1月份,直接将站点关站。
说是关站其实也并没有直接掐,因为考虑到我经常要用上面的技术备忘,其实是将外部访问关闭了,将站点限定到了内网地址上,这样只要是组过网的机子都能通过内网访问这个“内部站点”。
改头换面
但是一直这么做内部站点也不是办法,于是就计划直接抛弃整个php技术栈,不再信任这类动态渲染,改用静态渲染的方式,只不过这个计划一计划就是半年多。
静态博客站先前并不是没有接触过,甚至接触的还挺早,甚至和我刚开博客站的时间差不多,那就是Hexo,只不过这是一个纯静态的方案,受限于部署的繁琐,以及当时看不明白的复杂的主题配置,因此一直都是作为Codelab的主站使用。
现在是时候了,通过先前对VuePress的了解,并配合Hope主题,通宵了一个周末将先前的文章逐步迁移过来了,期间也尝试了各种方案和各种功能,配合Cos对象存储上传发布的方式解决了部署问题,使用CloudFlare新的R2对象存储做图床,比较可惜的是最终还是放弃了先前永久链接的方案,就是诸如https://blog.focot.cn/243
这种只需要一个文章ID就能直接定位到文章的方案,因为文章实在是太多而且需要分类,因此之前在公众号里面的原文地址可能会失效了。
不过界面也更加美观了,往后还会继续往里面添加更多内容的,甚至是一些首次公开的内容。