明月可以说是见到过太多 WordPress 网站被黑的示例了,加上平时明月也会接一些 WordPress 疑难杂症的解决服务订单,所以这方面绝对是专业对口了。作为一个资深 WordPress 博客站长,谁都有被黑过的经历,都是一步步走过来的,现在的互联网上 WordPress 被黑、被篡改是比被 CC 攻击、被 DDoS 攻击还要普遍的一个现象。要明月总结最主要的原因就是不安全的使用习惯和缺乏网站安全意识。
今天明月就给大家说说平时我们应该如何保护我们的 WordPress 不被黑,明月一直不建议 WordPress 去使用什么安全插件之类,虽然很久之前明月也有过相关插件的推荐,但说实话这些插件的体验都非常的差,甚至有的会严重拖慢整个 WordPress 的运行效率,严重的甚至拖垮整个服务器。毕竟不少的安全插件都涉及到 WordPress 核心文件的操作,这本身也是一种安全隐患,理论上不是 WordPress 官方的插件都不可靠,这也是我至今推荐 WordPress 缓存插件只推荐 WP Super Cache 的一个主要原因。所以,今天给大家讲的都是平时我们可以轻松做到只需要保持这些为习惯即可,并不涉及太多技术层面的事儿!
保护 WordPress 的核心其实就一条,那就是权限。所有 WordPress 被黑几乎都是在权限上出了问题,如:数据库权限、WordPress 核心文件权限、WordPress 核心目录权限等等,所谓的权限其实也是 Linux 系统一个非常核心的概念,用好权限逻辑根本不需要什么其他第三方的安全插件、安全应用啥的。Linux 本身安全性已经是翘楚级别了,WordPress 被黑只有一个原因就是你没有利用好 Linux。就拿 WordPress 的配置文件wp-config.php
来说,这个文件用过 WordPress 的都知道,对于 WordPress 来说非常的重要,最起码你 WordPress 网站的数据库地址、账号、密码都在这个文件里保存着的,并且还是明码哦,所以要保护我们 WordPress 首先就是把wp-config.php
的权限设置为600
(目的是只有文件的所有者(通常是 Web 服务器用户)才能读取和写入该文件。其他用户和组将无法访问该文件)
命令行方式设定 wp-config.php 文件权限:
chmod 600 wp-config.php
宝塔面板里操作:
记住,Linux 下永远不要把文件或者目录权限设置为777
,因为 777
代表所有用户都具有对文件或目录的完全控制权限,即读、写和执行权限。这意味着:
- 文件所有者 可以对文件或目录执行任何操作。
- 所属组 可以对文件或目录执行任何操作。
- 其他用户 可以对文件或目录执行任何操作。
虽然在某些情况下,例如临时授予对文件的完全访问权限时,可能需要使用 777 权限,但通常不建议使用 777 权限,因为它会带来严重的安全风险。 授予所有用户完全控制权可能会使恶意用户轻松窃取或破坏您的文件。正确的方案是:
- 对于文件所有者需要完全控制权的文件或目录,请使用 644 权限。 这意味着所有者具有读写执行权限,而所属组和其他人只有读权限。
- 对于所属组需要完全控制权的文件或目录,请使用 755 权限。 这意味着所有者和所属组具有读写执行权限,而其他用户只有读权限。
- 对于其他用户不需要任何权限的文件或目录,请使用 400 权限。 这意味着只有所有者具有读权限。
在宝塔面板里 WordPress 根目录默认的读写权限就是 755,所以这就会带来另一个安全隐患那就是内部威胁隐患,也就是恶意的、被植入了后门、木马的 PHP 代码,甚至有些 PHP 代码里隐藏了可以直接篡改 WordPress 核心目录wp-admin
、wp-include
的代码,这是很多 WordPress 被黑最常见的手法,解决起来其实很简单,就是不要随意上传、启用来路不明的插件、主题,尤其是所谓的免费破解版之类的,甚至连 WordPress 官方插件库里插件、主题都不保证一定没有恶意代码。这也是为啥明月一直强调 WordPress 慎用插件和主题的原因。
这里奉劝大家不要奢望你可以找出这些恶意代码,这不仅仅需要你有很强的代码阅读理解能力,还需要大量的时间精力,有这本事和功夫,你完全可以自己写个插件了都。
所以,这里明月的习惯是不定期的检查一下 WordPress 核心目录文件是否被篡改、是否有多余的文件,可惜的是宝塔面板里没有提供免费的方法,付费的明月也没有用过,反正明月都是直接命令行解决,在宝塔面板里大家完全可以借助【终端】里运行如下的命令即可:
diff -r /path/wordpress /path/www.imydl.com | diffstat
执行上述命令需要提前下载好 WordPress 最新版压缩包并解压到指定目录/path/wordpress
,然后通过diff
命令比较你的站点目录/path/www.imydl.com
的 WordPress 核心文件目录是否有变更,最后的diffstat
命令是根据diff
的比较结果,显示统计数字。 diffstat
读取diff
的输出结果,然后统计各文件的插入,删除,修改等差异计量。Linux 默认是没有安装diffstat
命令的,大家手动在【终端】里安装即可:
下载 WordPress 最新压缩包并解压:
wget https://wordpress.org/latest.zip
解压缩:
unzip latest.zip
注意,出于安全考虑这个 WordPress 最新压缩包一定要放到 Web 端无法请求的目录里,并记录好绝对地址。
CentOS:
yum install -y diffstat
Debian 或者 Ubuntu:
apt install -y diffstat
执行结果如果发现有被更改过的文件就会显示出来具体的信息,如下图所示:
从上图我们可以看到只有admin-zh_CN.po
和zh_CN.po
这两个无关紧要的语言包被修改过,说明我们站点用的 WordPress 是完整安全的。
我们还可以再加入一个-d 参数,来对比排查一下是否又多余的文件和目录:
diff -rd /path/wordpress /path/www.imydl.com | diffstat
如果发现了,可以直接删除掉,也说明你的 WordPress 已经被污染了,这时候就要小心了,仔细回忆一下是否安装了什么插件或者主题,找到这些停用排查吧。不过,明月的经验是直接删除最好,然后彻底的更新 WordPress,一般会缓解很多,如果不幸被篡改了 Linux 设置,那就是只能备份好数据重置系统了。
这里,明月给大家分享一个快速删除 WordPress 核心目录文件并自动下载最新 WordPress 解压的脚本:
#!/bin/bash
# 定义 WordPress 安装路径
WP_PATH="$PWD"
# 导航到 WordPress 安装目录
cd "$WP_PATH"
# 下载最新版的 WordPress
wget https://wordpress.org/latest.zip
# 解压文件
unzip latest.zip
# 删除旧的 wp-admin 和 wp-includes 目录
rm -rf wp-admin
rm -rf wp-includes
# 进入 wordpress 目录并删除 wp-content(如果需要)
cd wordpress
rm -rf wp-content
# 复制新文件到上级目录覆盖旧文件
mv -f * ..
# 删除 wordpress 目录
rm -rf wordpress
# 赋予文件正确的所有权和权限
chown -R www:www "$WP_PATH"
# 提示完成信息
echo "WordPress 升级完成,请检查网站功能是否正常。"
保存上述代码为updatewp.sh
文件,然后修改为可执行权限:
chmod +x updatewp.sh
复制updatewp.sh
文件到网站根目录执行:
./updatewp.sh
显示"WordPress 升级完成,请检查网站功能是否正常。"就表明你网站的 WordPress 核心目录、文件已经被替换为 WordPress 最新版了,全程都是自动的,运行完记得删除updatewp.sh
即可。放心不会影响你网站原有内容的,仅仅是自动替换了 WordPress 核心文件和目录而已,明月亲测有效的。我经常这么给代维、托管客户的 WordPress 升级更新的,比 WordPress 后台更新更加高效安全,永远不会出现各种奇葩的更新错误的。
如此养成上述的操作习惯,基本上你的 WordPress 就很难被黑,并且定期的对比一下 WordPress 核心目录和文件的完整性可以及时发现各种被黑的风险,这比你用什么安全应用扫描快捷有效多了。涉及安全方面的无小事,能不用第三发的就少用第三方的就是了。
至于 SQL 注入攻击什么的,一般只要做好上述的保护操作,就不会被恶意注入的,除非你用的某个插件或者主题里有不规范的 SQL 语句漏洞、BUG 被别人扫描到了,那就不是 WordPress 被黑的问题了,趁早删除插件或者更换主题吧!话说,用的人越多和破解版最多的主题最容易被 SQL 注入攻击,成功率好像还很大的样子!有条件还是购买正版主题为佳了,花点儿钱的事儿,不丢人!