WordPress 是全球使用率最高的建站程序,也正因为如此,它成了自动化攻击脚本的重点目标:wp-login.php 被暴力破解、XML-RPC 接口被批量调用、主题和插件漏洞被反复扫描利用……一旦被攻破,轻则被挂上黑链和广告代码,重则整站被篡改、数据被加密勒索。本文整理了一份可以直接照着做的 WordPress 安全防护清单,从登录入口、文件权限、防注入防篡改三个维度逐一加固,配套的 Nginx 配置和宝塔面板操作都可以直接落地。
一、登录入口防护:堵住暴力破解
暴力破解是 WordPress 站点最常遭遇的攻击:攻击者用弱口令字典不断尝试 wp-login.php,猜对了就直接登录后台。第一件事就是把登录入口保护起来:
- 修改登录地址:使用 WPS Hide Login 等插件把登录页改成自定义路径,让扫描器找不到登录入口;
- 限制尝试次数:安装 Login LockDown 之类的插件,连续输错几次密码后锁定该 IP 一段时间;
- 开启双因素认证:给管理员账号绑定验证器,即使密码泄露也进不了后台。
服务端再叠加一道 Nginx 限速,从源头压制登录接口的高频请求:
# 登录接口限速:每 IP 每分钟最多 3 次登录尝试
limit_req_zone $binary_remote_addr zone=login:10m rate=3r/m;
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
proxy_pass http://127.0.0.1:8080;
}
另外强烈建议直接禁用 XML-RPC 接口,它历史上常被用来放大暴力破解请求:
# 禁用 XML-RPC,避免被用作暴力破解放大器
location ~* /xmlrpc\.php$ { return 403; }
二、文件与目录权限加固
很多站点被黑是因为权限设置太宽松。Linux 下正确的权限原则是:目录 755、文件 644、配置文件尽量收紧。在宝塔面板 → 文件中,可以右键站点目录逐项设置权限;批量处理时在终端对站点根目录统一执行权限修正命令即可,重点是下面几条:
- 站点目录统一设置为 755,普通文件统一为 644;
- wp-config.php 存放数据库密码,权限要收紧到仅属主可读写,即 600;
- wp-content/uploads 上传目录保持可写即可,切勿使用 777,否则任何进程都能写入恶意文件。
再配合 Nginx 规则,禁止 uploads 等上传目录执行 PHP 脚本,防止攻击者通过上传图片马 getshell:
# 上传目录禁止执行 PHP
location ~* /wp-content/uploads/.*\.php$ { deny all; }
同时建议在 Nginx 配置里关闭目录列表和版本号泄露:autoindex off; 与 server_tokens off;,减少信息暴露面。
三、防注入与防篡改:让网站”只读”该读的地方
登录和权限都加固后,还要防住两类常见的破坏:SQL 注入和文件篡改。第一,数据库账号使用最小权限,给 WordPress 单独建库建号,只授予该库的增删改查权限,即使被注入也无法读取其他库的数据。第二,在 wp-config.php 中添加 DISALLOW_FILE_EDIT 常量,禁用后台文件编辑器,防止攻击者登录后直接修改主题文件。
第三,建立文件完整性基线:站点部署完成后,用校验工具对关键目录(尤其是主题、插件和根目录的 PHP 文件)生成一次哈希基线,之后每天比对一次,任何被篡改的文件都会在比对结果中暴露出来。把比对任务加入 crontab 定时执行,异常文件会直接出现在日志里,做到”被改即知”。
此外,定期备份站点文件和数据库到异地,是应对勒索和误删的最后一道保险。备份建议每周至少一次,重要更新前务必先手动备份。
四、几个容易被忽略的细节
上面的加固做完,再补几个低成本高收益的小细节:
- 关闭用户枚举:访问 ?author=1 会泄露管理员用户名,可通过插件或重写规则屏蔽;
- 及时更新:主题和插件保持最新版,不用的主题插件直接删除,减少漏洞面;
- 定期扫描:用 WPScan 等工具定期检测已知漏洞,把扫描结果纳入周报;
- 前置防护:给站点接入 CDN 或云 WAF,把常见攻击在云端过滤掉,源站只处理干净流量。
总结
WordPress 安全没有一劳永逸的解决方案,靠的是”配置加固 + 良好习惯 + 持续监控”三件事的叠加:登录入口堵暴力破解、文件权限收紧、注入与篡改有基线有备份,配合定期的更新和扫描,大部分攻击都能在造成损失之前被拦下来。如果不想在这些细节上投入太多精力,也可以把安全防护整体交给速度网络的网站防护服务,云端实时防护加应急响应,让专业的人做专业的事。
