一、概述
博客网站的运行有一段时间了,随着博文数量的不断增多、文章类型的不断丰富,于是逐渐的对文章的隐私性有了要求。有些文章可能是自己的私人日记,不便于公开发表,但是有时候又需要对一些亲密的人开放,因此,就需要对这些文章加密处理,然后向外提供密码访问。
Hexo博客属于静态网页,我们不能够在后端对用户的请求做分析,判断其是否有权限访问某一文章,所以我们就要利用静态网站的特征来进行加密,对Hexo博文的加密访问处理大致有两种思路,其一是在前端进行加密,通过对具体的文章内容进行加密,用户访问的时候将加密后的文章传送到前端,然后通过输入的密码进行解密文章,之后显示在网页上。其二是通过服务器提供的路径访问控制功能进行加密,利用该功能对特定网站路径提供授权访问,从而达到博文的加密访问功能。
1) Hexo文章内容加密的方式有很多,一般是使用可逆的加密算法对文章内容进行加密解密,比如可以使用”AES加密算法”等,当然也可以自己编写一些算法,总之保持加密后的字符串可逆即可。在前端,将字符串解密之后,添加相关的样式就可以展示出来了。Hexo现在也有相关的插件,例如Hexo-Blog-Encrypt,hexo-encrypt。这些插件使用起来非常方便,安装之后简单的配置一下就可以使用。我的博客使用的是Hexo-Blog-Encrypt。
2) Hexo可以运行在众多的服务器软件上面,例如有:Nginx,Tomcat,Apache等。这些软件基本上也都提供了路径访问控制的功能。本网站使用的是Nginx,因此就需要采用Nginx的授权访问控制功能。
二、前端加密方式
前端加密方式,就是对文章的内容进行加密解密,这个是实现的原理也很简单,如果对前端比较了解的话,也可以自己写一个这样的加密插件。比较知名的加密插件有Hexo-Blog-Encrypt,hexo-encrypt等。经过比较,最终使用了Hexo-Blog-Encrypt插件,已开源,github地址为Hexo-Blog-Encrypt
2.1 安装配置
hexo安装插件的方式有两种,一种是在package.json中写入所需要的的插件名,然后npm install,另一种方式是直接使用 npm install –save <插件名>即可。 这里选用后者进行安装:
npm install –save hexo-blog-encrypt
然后在hexo全局配置文件_config.yml中启用该插件:
1
2
3# Security
encrypt:
enable: true
2.2 使用
在需要加密的文章头部添加所要求的字段,如:password,abstract,message等。
1
2
3
4
5
6
7
8---
title: 文章加密
date: 2020-06-04 9:46:03
password: 程序员在旅途
abstract: 这是一篇加密博文,请输入密码后查看
message: 这里需要密码才能访问。
wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试.
---
2.3 注意点
1) 尽量使用最新版本的插件,因为之前的版本对一些特性的支持可能不是很好。
2)如果你的博客使用了TOC,这就要进行一些额外的处理,不同的主题处理方式不一样,这个网上有教程。
3)部分博客中, 解密后部分元素可能无法正常显示或者表现, 这属于已知问题. 目前的解决办法是通过自行查阅自己的博客中的代码, 了解到在 onload 事件发生时调用了哪些函数, 并将这些函数挑选后写入到博客内容中。
三、服务器授权访问方式
我们这里是使用了Nginx访问控制的特性来实现的加密功能。Nginx的安装配置可以参考我的博客Ubuntu下安装Nginx服务器并进行优化。Nginx访问控制有两种方式,其一是基于基于用户授权的访问控制,其二是基于IP的访问控制。实现网站的加密访问,使用的是用户授权方式,当客户端想要访问相应的网站或者目录,要求用户输入用户名和密码才能访问。(注意:Nginx的用户授权访问控制功能是由http_auth_basic_module模块提供的, 因此,Nginx服务器如果是自行编译源码安装的,需要在编译的时候加上该模块,使用系统命令安装的会默认加上该模块。)
过程主要有三步,1)安装htpasswd插件,2)创建密码文件,3)配置Nginx的加密目录。
1)插件安装(我使用的是Ubuntu,其他的系统可能命令会有所差别):
sudo apt-get install apache2-utils
2)创建密码文件:(文件存放路径可自定义,但是要和服务器的配置路径一致才可以)
1 | sudo htpasswd -c /usr/local/nginx/passwd username |
3) 配置Nginx服务器:
配置完Nginx之后,重启服务可以了。
四、总结
以上两种方式,都可以实现Hexo博文的加密,但是要注意的是,前端加密方式,是把加密后的博文返回给前端了,这是有被破解的可能性的,所以也不是很安全。服务器加密方式是使用了服务器的路径访问控制功能,相对来说比较安全,但是配置起来较为复杂。