解决WordPress的安全问题

plesk是个好面板,好就好在它给自己公司恰钱真的很快

WP已经从一个简单的博客变身成为一个几乎是万能的CMS服务平台了,自然拿来建站的时候也得考虑很多相关的安全因素。具体有多不安全呢,我以前的个人博客就被人爆轰过xmlrpc.php,我能不害怕嘛(所以我现在用Hexo了,有本事去轰某著名同性交友网站的服务器啊(无端)
但是还是要拿WP来建站,这个CMS实在是太方便了,所以该考虑的安全问题还是要考虑起来。正好装了plesk,顺便能处理一下WP的管理。然而这只是坑的起步,作为安全性处理这么高级的功能嘛,自然是要狠狠宰一笔了……

至于有多昂贵呢?plesk pro版一个月的售价为15£,而我的服务器一个月也才5$,有这钱我做什么不好,要来贴这吃相难看的贵公司的臭脸?

甚至还有更昂贵的东西,那就是这所谓的自动升级。具体有多恶心呢?要是用这个功能需要购买三份授权,至于每一份的价格嘛……

那怎么办呢?虽然plesk在安全方面的自动部署确实需要花钱购买,但是好在查看安全问题还是可以免费获得的。就好比是一个光是大喊出现bug的客户,要它帮忙修复一下就开始臭不要脸狠狠敲诈,你说气不气

然而如果连基本的指令技能都没有的话那也不至于去玩VPS了。既然它只肯提意见,那苦力活还是我们自己来做好了。

plesk会把文件放在/var/www/vhosts/domain.name下,所以可以先cd进入相关的目录。

1
cd /var/www/vhosts/example.com/httpdocs # 假设我们的域名是example.com

先以最关键的为例,修复一下权限管理的问题:

对于此类严重的安全问题,plesk还勉强比较好心地提供了一个解决方案思路,可以用作参考:

1
2
3
find . -type d -exec chmod 755 {} \; # 修改目录权限为755
find . -type f -exec chmod 644 {} \; # 修改文件权限为644
chmod 600 wp-config.php # 最后再修改config文件,可别像我一样之前改好后面又全都白给了哦~

然后是禁止执行 wp-includes 和 wp-content/uploads 目录中的 PHP 脚本:

以运行在Apache Httpd下的PHP环境为例,在以上两个目录新建.htaccess文件,并写入内容:

1
2
3
4
<Files *.php>
Order Allow, Deny
Deny from all
</Files>

然后是关闭pingbacks,为了安全起见,我决定直接禁用掉xmlrpc功能。

我选择了插件保护的方式,安装了一个插件Disable XML-RPC即可。

接下来是启用防盗链保护。

经过查询,Windows版的plesk是自带这个功能的,然而不知道为何反而是Linux版的不带了。

所以直接手搓nginx配置,去Apache与nginx配置下,给nginx添加如下配置:

1
2
3
4
5
6
location ~* \.(gif|jpg|png|jpeg|webp)$ {
valid_referers none blocke example.com *.example.com; # 假设我们的域名是example.com
if ($invalid_referer) {
rewrite ^/ https://aka.ms/no; # 如果被盗链,我们要返回的是这张图片
}
}

其中aka.ms/no是一张非常有趣的梗图,感兴趣的话可以点我去看看~

然后是禁用未使用的脚本语言,但是我根本就没有安装那些运行环境,自然使用语言也就无从谈起了,直接访问的话就变成文件下载了,那没有工具环境用来执行,好像问题也不大

再接下来是考虑禁用文件编辑。这个也很简单,去wp-config.php加入这样一行代码即可:

1
define('DISALLOW_FILE_EDIT', true);

至于启用爬虫防护,为了防止搜索引擎的爬虫受到不必要的影响,这些安全措施还是交给Cloudflare去处理吧(逃)