静态博客加密

静态博客也能加密?

因为烦恼 home 目录的杂乱,bing搜索「home目录清洁」,得到一篇博客: 码农的自我修养之保持干净的 $HOME 目录 - 少数派 以及它的 GitHub pages 地址 保持干净的 $HOME 目录

补充: markdown 的超链接文本遇到有 $ 需要转义,写作 \$,否则可能解析出错。

然后在这个 GitHub pages 发现很多个人内容,关于生活而非技术。 好奇之下走马观花浏览一番,其中一篇博客居然要求密码: 回忆-毕业十年

按理说静态页面是没有服务端交互的,它怎么实现加密的呢?网上搜搜,找到 一篇帖子, 其中 6 楼有一个回复提供了一个 静态博客加密案例。 略微研究一番源码,原理不难,就是部署加密文件而非明文 HTML,然后在浏览器输入密钥解密。 这个思路可以借鉴,但是不推荐使用。

回到前面的博客,要知道 GitHub pages 是公开的,也就是可以查看源码的。

如果 GitHub 用户名是 xxx,那么博客地址就是 xxx.github.io,源码地址就是 github.com/xxx/xxx.github.io

查看源码发现该博客是用 vue 写的,并不是前面案例的方案。 vue 生成的不是一般的静态网页,而是 webapp。因为不熟悉 vue,它又不是一般的 js,无从下手。 偶然尝试新标签页打开链接,居然显示内容了!只是一秒钟后又要求输入密码,并且锁定背景。 根据这个发现,可以推测要求密码完全是「防君子不防小人」,哈哈。

首先测试 curl 下载 html,验证可行,可以看到全部内容! 然后仔细审查源码,发现博客内容是用 markdown 编写的,完全明文。 至此成功「破解」,虽然不是正面突破,但是密码攻防就是如此,百密一疏就是致命。

EOF

翻阅文件发现了这篇一个月前的随笔,整理成文。

另外,之前没有破获密码有些遗憾,考虑到既然是全部明文,那么密码应该也是明文, 于是又查看那个博客的源码,果然找到了线索,在 这个文件 里发现了「私密访问」。文件很短,也没有复杂逻辑,其中要求密码的代码如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 路由守卫
        if (typeof window !== 'undefined') {
            router.onBeforeRouteChange = (to) => {
                if (checkPrivateRoute(to) && !isAuthenticated(to)) {
                    const password = prompt('🤫🤫 暗号 🤫🤫');
                    if (btoa(password ?? '') === 'OTUzNg==') {
                        localStorage.setItem(`auth_${to}`, 'true');
                        return true;
                    }
                    return false;
                }
                return true;
            };
        }

可以看到密码判断逻辑 btoa(password ?? '') === 'OTUzNg=='。 因为不常用 JavaScript,搜索得知其有两个函数 btoaatob 用来编解码 base64。 打开浏览器控制台,输入 atob('OTUzNg==') 得到 9536,这就是最终的密码。

打开加密的博客,因为内容过多、网络很慢,竟然将近 10 秒的自由阅读后才要求密码😀。 输入上面获取的密码,果然通过。

EOF

Built with Hugo
Theme Stack designed by Jimmy