WordPress 凭借易用性和庞大的生态,占据了全球网站四成以上的份额,但也正因为用的人多,它成了黑客和扫描器最常光顾的目标。个人站长做站往往重功能、轻安全,等到发现网站被挂马、变成挖矿肉鸡、甚至被搜索引擎拉黑,才追悔莫及。这篇文章按照"基础加固、插件主题审计、应急响应"三个层次,给出一份个人站长可以照着执行的 WordPress 安全清单。
一、账号与登录入口安全
登录入口是攻击者最想突破的关口,也是暴力破解的重灾区。首先,不要使用 admin 作为管理员用户名——这是扫描器字典里的第一候选。正确做法是新建一个管理员账号,然后把 admin 降级或删除。其次,密码一定要用强密码,建议用密码管理器生成并保存,不要所有网站共用一个密码。
在此基础上,建议做三件事。第一,限制登录尝试次数,服务端可以用 fail2ban 监控 wp-login.php 的失败记录,站点层面可以用 Limit Login Attempts Reloaded 这类插件,两者结合效果最好。第二,开启双因素认证,Wordfence 和 WP 2FA 等插件都支持,就算密码泄露,攻击者也进不了后台。第三,隐藏登录地址,WPS Hide Login 这类插件可以把 wp-login.php 改成自定义路径,扫描器找不到登录入口,暴力破解就无从谈起。需要注意的是,这类插件与页面缓存插件配合时偶尔会有兼容问题,配置后要实测一遍登录流程。
如果你的网站只有自己维护,还可以更进一步:在防火墙层把登录路径限制为只允许你常用的 IP 或 VPN 出口访问,这是最彻底的方案。
二、文件与目录权限
文件权限设置不当,轻则网站报错,重则被写入恶意文件。基本原则是:目录 755、文件 644,只有真正需要写入的目录才放宽权限。可以用 find 命令批量修正:
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;wp-config.php 包含数据库凭据,权限应收紧为 600 或 640:chmod 600 wp-config.php。上传目录 wp-content/uploads 保持 755 即可,WordPress 需要往里面写文件,但目录本身不需要 777;如果遇到上传失败,优先排查属主是不是 www-data,而不是直接上 777。顺便把整个网站目录的属主理顺:chown -R www-data:www-data /var/www/html,属主混乱(比如 root 拥有可写目录、或者普通用户拥有 Web 目录)也会带来权限提升的风险。
另外,在 wp-config.php 中加上下面这行,可以关闭后台的主题和插件编辑器,防止攻击者拿到后台权限后直接改代码:
define('DISALLOW_FILE_EDIT', true);三、wp-config.php 与核心配置加固
wp-config.php 里有一组安全密钥(AUTH_KEY、SECURE_AUTH_KEY 等),它们用于加密登录 Cookie。建议使用官方密钥生成器生成随机字符串并定期更换,更换后所有已登录会话会失效,需要重新登录,这正好可以顺带踢掉可能存在的可疑会话。
数据表前缀默认是 wp_,扫描器会根据这个前缀构造 SQL 注入 payload。装站时改成自定义前缀(比如 wp8x_)能提高一截安全性,但装完再改非常麻烦,所以一定要在安装阶段就改好。
XML-RPC 接口(xmlrpc.php)是另一个高风险点:它支持通过 POST 批量调用,历史上多次被用于暴力破解放大攻击和 DDoS 反射攻击(pingback 放大)。如果你用不到它,直接在 Nginx 里封掉:
location = /xmlrpc.php {
deny all;
}生产环境还要确保关闭错误显示,在 wp-config.php 中设置 WP_DEBUG 为 false,避免把数据库错误信息暴露给访客。隐藏版本号也有必要:在主题 functions.php 里加上 remove_action 移除版本输出,并删除根目录的 readme.html,减少攻击者针对特定版本漏洞的精准打击。
四、安全响应头
在 Nginx 配置的 server 块中添加一组安全响应头,可以抵御点击劫持、MIME 嗅探等常见攻击:
add_header X-Frame-Options SAMEORIGIN always; add_header X-Content-Type-Options nosniff always; add_header Referrer-Policy strict-origin-when-cross-origin always; add_header X-XSS-Protection "1; mode=block" always;
如果已经全站 HTTPS,还可以加上 HSTS 头(Strict-Transport-Security),强制浏览器使用 HTTPS 访问。更进阶的 Content-Security-Policy 头能有效缓解 XSS,但配置不当容易误伤主题和插件的正常功能,建议在测试环境验证无误后再上线。
五、插件与主题安全审计
这是整个清单里最容易被忽视、也最致命的一环。绝大多数 WordPress 网站被黑,源头都是来路不明的插件或主题——尤其是破解版、汉化版主题插件,里面被植入后门是常态。请务必遵守以下几条:
- 只从 wordpress.org 官方目录或作者官网下载插件和主题;
- 下载前查看下载量、最近更新时间、用户评价和支持数,超过一年没更新的要格外警惕;
- 不用的插件和主题及时删除,每多一个插件就多一分攻击面;
- 所有插件和主题保持最新版本,老版本漏洞往往有公开的利用代码。
如果你对代码有一定基础,可以对新装的插件做一次快速审计,重点搜索以下几类危险函数:
grep -rn "eval(" wp-content/plugins/插件目录
grep -rn "base64_decode" wp-content/plugins/插件目录
grep -rnE "shell_exec|passthru|system\(|exec\(" wp-content/plugins/插件目录
grep -rn "assert(" wp-content/plugins/插件目录发现代码里出现 eval 配合 gzinflate、base64_decode 的解码执行链,基本可以断定是后门,立即删除。没有代码基础也没关系,可以把插件压缩包上传到 VirusTotal 在线扫描,或者用 Wordfence 的扫描功能做常规体检。主题的 functions.php 是另一个需要重点审查的文件,网上拷贝来路不明的代码片段之前,先看看里面有没有上面这些危险函数。
除了插件主题本身,还有两个容易忽略的检查点:一是网站根目录和 wp-content/uploads 目录下有没有可疑的 PHP 文件,正常的上传目录只应该有图片和附件,出现 php 文件本身就是危险信号;二是检查 crontab 和 /etc/cron.d 目录,很多被植入挖矿程序的网站,恶意脚本就是靠定时任务周期性执行的,只删文件不删定时任务,过一会儿后门又回来了。
六、数据库与备份
安全加固做得再好,也挡不住所有攻击,所以备份是最后一道防线。WordPress 的备份重点是两样:数据库(文章、配置、用户都在里面)和 wp-content 目录(主题、插件、上传的图片)。数据库可以用 mysqldump 定时导出,配合异地存储。建议至少保留最近 7 天的备份,并定期做一次恢复演练,确认备份真的能恢复——很多站长备份了几年,真正要用的时候才发现备份文件是坏的。
七、被黑后的应急响应流程
万一网站还是被黑了,不要慌,按下面的顺序处理:
- 立即修改所有密码:WordPress 管理员、FTP、数据库、服务器 root,一个都不能漏;
- 检查后台用户列表和 wp_users 表,删除来路不明的管理员账号;
- 查找后门文件:用 find 找出最近 7 天被修改的文件,重点检查 wp-content/uploads 目录下不该出现的 PHP 文件,以及被注入恶意规则的 .htaccess;
- 用干净备份恢复,或者重新下载官方 WordPress 覆盖核心文件;
- 排查入侵途径并修复漏洞,否则很快会被再次入侵——入侵者多半是通过某个老版本插件或弱密码进来的,漏洞不补、密码不改,同样的攻击会反复发生。
平时做好两件事,应急时会轻松很多:一是定时备份,二是记录文件基线(比如备份一份文件列表和校验和),有了基线,找出被篡改的文件就是一分钟的事。
八、总结
WordPress 安全没有一劳永逸的方案,它是一个持续的过程。把本文的清单逐项落实:强密码加双因素、收紧文件权限、封掉用不到的接口、只装可信来源的插件、保持更新、做好备份,你的网站就已经比绝大多数同类站点安全了。最后补充一点:配置做完之后,建议再用在线扫描工具(比如 Sucuri SiteCheck 或国内站长工具的安全检测)从外部视角检查一遍网站,看有没有遗漏的风险点。记住一个核心原则:最小权限、最小攻击面——凡是用不到的功能,一律关掉。