WordPress 网站安全设置清单:12 步堵住黑客入口
本站部分链接为联盟推广链接。通过这些链接购买,我可能获得佣金...
这不仅不会增加您的实际费用,通常还能让您享受到专属折扣。所有上榜推荐均基于真实项目环境下的自费实测,排名完全由客观测评数据决定。详细规则请查阅《免责声明》。
前阵子帮一个做外贸的朋友看站,他很委屈:主题是正版的,插件也是正版的,怎么首页还是被挂了赌博弹窗?
我翻了一下日志,答案很朴素。后台地址是默认的,管理员账号叫 admin,密码有一年多没换过。人家根本没用什么高深漏洞,一个脚本对着登录页撞了几天就进来了。
这其实是大部分 WordPress 被黑的真相:不是被高手盯上,而是被批量扫描的脚本顺手捡走。 脚本不在乎你是谁,它只找没锁门的。所以安全加固的目标也不是「绝对安全」,而是让你的站比旁边那些站难撬一点,脚本试几次不行就换下一家了。
下面这 12 项,我按黑客实际的进门路线分成 4 层:登录入口、过期代码、文件权限、服务器。越靠前越容易被利用,也越容易修。
先弄清楚:黑客一般从哪几扇门进来?
我把这几年见过的被黑案例粗略归了一下类,基本逃不出三条路:
- 登录页被撞开。 弱密码,或者用户名就叫 admin。
- 插件或主题有已知漏洞。 站长没更新,漏洞细节早就公开了,脚本照着打就行。
- 服务器层面没管好。 面板默认端口裸奔,上传目录能执行 PHP,后门一放就生根。
你会发现,这三条里没有一条需要什么「黑客技术」。大多是站长自己没关门。
第一层:把登录入口锁死(第 1–5 项)
1. 管理员用户名别叫 admin
脚本撞库时,用户名基本都从 admin、administrator、站点名这几个猜起。你的用户名如果正好在里面,等于密码题已经替对方答了一半。
WordPress 的用户名创建后不能直接改。最省事的办法是这样:
- 新建一个管理员账号,用户名起得没规律一点。
- 用新账号登录。
- 删掉旧的 admin 账号。删除时 WordPress 会问你内容归谁,一定要选「把所有内容转给」新账号,不然文章会跟着一起删掉。
另外,个人资料里的「公开显示为」也别选用户名,改成昵称。不然你的登录名会直接挂在文章作者那一栏。
2. 密码交给密码管理器,别靠脑子记
这条人人都知道,但我见过太多站长的密码是「公司名+年份」。
其实 WordPress 新建用户时自动生成的那串乱码就很好用,问题只是记不住。所以直接装个密码管理器,Bitwarden、1Password 都行,让它记就好了。
顺带把主机后台、宝塔面板、数据库、FTP 的密码也一起换掉。这几个哪个被撞开,比 WordPress 后台还麻烦。
3. 给管理员开双重验证(2FA)
前两项能挡住撞库,但挡不住密码泄露。比如你在别的网站用过同一个密码,那个网站被拖库了,你的密码就在别人手里了。
2FA 的意义在于:就算密码丢了,没有你手机上那个 6 位动态码,照样进不来。
如果不想装大而全的安全插件,我推荐 WordPress 官方团队维护的 Two Factor 插件。我核对了官方页面:
- 当前版本 0.17.0,10 万+ 活跃安装,测试兼容到 WordPress 7.1.3。
- 要求 WordPress 7.0 及以上、PHP 7.4 及以上。
装好后,每个用户要自己去「用户 → 个人资料」,往下找到 Two-Factor Options 去开启。支持三种方式:
- 认证器 App(TOTP),比如 Google Authenticator,推荐用这个。
- 邮箱验证码。
- 备用码。
有两点我得说在前面。
一是备用码一定要生成,并且存进密码管理器。手机丢了又没备用码的话,就只能去数据库里手动解除了。
二是这个插件没有「强制某个角色必须开 2FA」的开关。官方 FAQ 也承认这一点,是开发者在跟进的需求。如果你的站有好几个管理员,得自己盯着每个人都开了。需要强制开启的话,可以用 Wordfence 自带的 2FA,后面会讲到。
其他方法可参考教程:WordPress 双重身份验证 WP 2FA 插件安装与配置教程
4. 限制登录尝试次数
WordPress 默认允许无限次输错密码。这是脚本最喜欢的特性:一秒试几十次,一直试到你换密码为止。
装个限制插件,输错几次就把这个 IP 关小黑屋。具体参数怎么设、用了 Cloudflare 后为什么必须改 IP 来源、自己被锁了怎么救,站内这篇讲得很细:Limit Login Attempts 防暴力破解配置教程,这里就不重复了。
如果你后面打算装 Wordfence,就不用再装这个了。Wordfence 自带登录次数限制,两个一起开是重复的。
5. 关掉或限制 XML-RPC
xmlrpc.php 是 WordPress 给手机 App 和老式客户端留的远程接口。问题在于,它有个 system.multicall 方法,一个请求里能塞几十组密码。很多限制登录次数的插件是按请求计数的,这么一来就被绕过去了。
先确认你用不用它:
- 用 WordPress 手机 App 发文章,可能会用到。
- 部分插件(比如 Jetpack)会用到。
都不用的话,直接关。有两种关法,效果不一样。
轻量关法:在子主题 functions.php 或 Code Snippets 插件里加一行:
// 禁用需要登录验证的 XML-RPC 方法(撞密码用的就是这类)
add_filter( 'xmlrpc_enabled', '__return_false' );
这个过滤器只禁用「需要登录」的那些方法,pingback 之类的还在。挡撞库是够了,但 xmlrpc.php 本身仍然能被访问。
彻底关法:在 Nginx 层直接拒绝访问。宝塔用户进「网站 → 设置 → 配置文件」,在 server { } 里加:
# 直接拒绝访问 xmlrpc.php,请求根本到不了 WordPress
location = /xmlrpc.php {
deny all;
}
保存后访问 你的域名/xmlrpc.php,看到 403 就说明生效了。
装了 Two Factor 插件的话,它从 0.14 版开始,默认就不允许用普通密码通过 XML-RPC 和 REST API 登录,只认应用密码(Application Passwords)。等于顺手又补了一层。
第二层:别让过期代码变成后门(第 6–7 项)
6. 开启自动更新,至少插件要开
很多人不敢开自动更新,怕更新完网站白屏。这个顾虑我理解,但算笔账:
- 更新导致白屏,回滚一下就好了,几分钟的事。
- 漏洞被利用、站被挂马,清理加恢复可能要好几天,还可能被 Google 标记成危险网站。
WordPress 核心的小版本(安全修复)默认就会自动更新。插件和主题要你自己去开:
- 插件:进「插件 → 已安装的插件」,每个插件右边有「启用自动更新」,点一下即可。
- 主题:在「外观 → 主题」里点开主题详情开启。
7. 删掉不用的插件和主题,盗版的一个都别碰
停用不等于安全。 停用的插件文件还躺在服务器上,里面有漏洞的话照样能被直接访问利用。不用的就删掉,只留一个当前主题,外加一个官方默认主题备用。
盗版主题和插件就更不用说了。网上那些「免费破解版 Pro」,相当一部分夹带后门。WP-VCD 就是很出名的一类恶意代码,专门藏在盗版主题里传播。省下几十美元,换来的可能是整个站被人遥控。
还有一种容易被忽视的情况:插件作者不维护了。 去 WordPress.org 看一眼插件页面的「最后更新」时间,一两年没动过的,要考虑找替代品。Wordfence 的扫描器会专门提醒你哪些插件已经被下架或废弃,这个功能挺实用的。
第三层:文件和权限,给后门断粮(第 8–10 项)
8. 禁用后台的文件编辑器
WordPress 后台有个「外观 → 主题文件编辑器」和「插件 → 插件文件编辑器」,能直接改 PHP 代码。对你来说是个方便功能,对拿到后台权限的黑客来说,就是现成的植入后门工具。
在网站根目录的 wp-config.php 里,找到 require_once ABSPATH . 'wp-settings.php'; 这一行,在它上面加:
// 禁用后台主题/插件文件编辑器
define( 'DISALLOW_FILE_EDIT', true );
保存后刷新后台,那两个编辑器菜单就消失了。以后要改代码,走宝塔文件管理或 SFTP,反正改代码本来也不该在线上后台直接动。
9. 上传目录禁止执行 PHP
/wp-content/uploads/ 是放图片和 PDF 的地方,正常情况下这里不应该有任何 PHP 文件被执行。可很多后门恰恰就是伪装成上传文件扔进这里,然后通过浏览器访问来触发。
参考文章给的是 Apache 的 .htaccess 写法。但国内用宝塔的朋友大多跑 Nginx,.htaccess 根本不生效。Nginx 要这样写:
# 禁止 uploads 目录下的任何 PHP 被执行
location ~* ^/wp-content/uploads/.*\.php$ {
deny all;
}
放的位置很关键。 Nginx 的正则 location 是按出现顺序匹配的。宝塔的站点配置里有一行 include enable-php-xx.conf;(xx 是 PHP 版本号),负责把 .php 交给 PHP 处理。上面这段规则必须放在这一行之前,否则请求会先被 PHP 规则接走,你的 deny 就成了摆设。
验证方法:在 uploads 目录里随手建一个 test.php,浏览器访问它。返回 403 就说明生效了。测完记得删掉这个文件。
如果你在日志里还看到各种乱七八糟的扫描请求,比如 .env、wp-config.php.bak 这类路径,可以接着看这篇:恶意扫描的 Nginx 拦截规则和 4 种防护方案。规则可以直接复制用。
10. 账号按最小权限分配
请了写手发文章,给他开个管理员?千万别。管理员能装插件,能装插件就等于能往服务器上传代码。
原则就一句:给刚好够用的权限,一点都不多给。
- 写手给「作者」或「投稿者」。
- 内容负责人给「编辑」。
- 管理员只留你自己。
5 种角色具体能干什么,可以看这篇 WordPress 用户角色和权限分配详解。
找外包修网站、要临时进后台的情况,也别把你的管理员密码发过去。用临时免密登录链接插件生成一个限时账号,到期自动失效。活干完了,你连改密码都省了。
第四层:服务器和面板,别让地基漏风(第 11 项)
11. 全站 HTTPS,加固好面板
HTTPS 现在是标配。没有它,你在咖啡馆连公共 WiFi 登后台,密码就是明文在网上跑。宝塔里申请 Let’s Encrypt 免费证书,点几下就有。至于免费证书够不够用、什么情况下才值得买付费的,看 免费 SSL 和付费证书的区别。外贸展示站基本免费的就够了。
面板本身也常常被忽略。宝塔、aaPanel 的后台权限比 WordPress 后台还大,进了面板等于拿到整台服务器。几个要点:
- 改掉默认登录入口和端口。
- 开启面板的双重验证。
- 别在面板里装一堆用不上的软件。
如果你用的是共享主机,服务器层你基本碰不到,安全全看主机商。邻居网站被黑会不会殃及你、有没有自动备份和隔离,这些在买主机时就得问清楚。不想自己折腾服务器安全的话,翻翻 WordPress 主机推荐汇总,挑家自带防护和备份的托管主机,能省不少心。
要不要装安全插件?装一个就够
前面 11 项大多不用安全插件也能做。但如果你想要文件扫描、防火墙、登录保护打包在一起,Wordfence 依然是我最常推荐的。我核对了它在 WordPress.org 的最新信息:
- 当前版本 9.0.2,500 万+ 活跃安装,测试兼容到 7.1.3。
- 免费版包含:Web 应用防火墙、恶意软件扫描、登录次数限制、TOTP 双重验证、登录验证码。
- 从 9.0 版开始,免费版也支持 Passkey 通行密钥登录了。
免费版和付费版最关键的差别只有一条:防火墙规则和恶意软件特征库,免费版要延迟 30 天才能收到。付费版是实时推送。
对一般外贸展示站来说,延迟 30 天的规则配合第 6 项的自动更新,其实也够了。站点有交易、客户数据比较敏感的,再考虑付费版。
别同时装两三个安全插件。 它们的防火墙和登录拦截会互相打架,还拖慢网站。这一条参考文章评论区也有人问过,答案一样:选一个,配好它。
第 12 项:异地备份,这是你翻盘的底牌
前面 11 项都是「降低被黑概率」,备份是「被黑了也能活」。
开头那位朋友,最后是我帮他把服务器推倒重来的。为什么不直接删木马?因为黑客往往会在图片目录、主题深处留好几个后门,你删了表面那个,过两天弹窗又回来了。最稳的办法是用干净的备份重建。可他偏偏没备份,只能从更早的旧文件一点点捡。完整过程我写在这篇里了:全套正版依然被黑的外贸站重构案例。
备份我建议记住三个要点:
- 自动。 靠手动的备份,迟早会忘。宝塔的「计划任务」能定时备份网站文件和数据库。
- 异地。 备份文件不能只放在同一台服务器上,服务器被黑或硬盘坏了,备份会一起没。至少同步一份到云存储或本地电脑。
- 能恢复。 隔几个月真的拿备份恢复一次试试。我见过备份了一年、结果压缩包是坏的。
频率按更新量定:天天发文章的站每天备份,几个月才改一次的展示站,每周一次也行。
12 项清单汇总:按优先级排好了
照着表从上往下做。前 6 项花半小时,能挡住绝大部分脚本攻击。
| 优先级 | 项目 | 大概耗时 | 怎么验证做到了 |
|---|---|---|---|
| 1 | 管理员不叫 admin | 5 分钟 | 用户列表里没有 admin |
| 2 | 强密码 + 密码管理器 | 10 分钟 | 所有后台密码都是随机生成的 |
| 3 | 管理员开 2FA,存好备用码 | 5 分钟 | 退出重登时要求输入动态码 |
| 4 | 限制登录次数 | 5 分钟 | 故意输错几次,被锁定 |
| 5 | 关闭或限制 XML-RPC | 5 分钟 | 访问 /xmlrpc.php 返回 403 |
| 6 | 开启插件自动更新 | 3 分钟 | 插件列表显示「禁用自动更新」 |
| 7 | 删掉闲置和盗版插件主题 | 10 分钟 | 只剩在用的插件和 1–2 个主题 |
| 8 | 禁用后台文件编辑器 | 3 分钟 | 后台找不到「文件编辑器」菜单 |
| 9 | uploads 禁止执行 PHP | 10 分钟 | 测试 php 文件返回 403 |
| 10 | 账号最小权限 | 10 分钟 | 管理员只有你自己 |
| 11 | HTTPS + 面板加固 | 20 分钟 | 浏览器显示小锁,面板入口已改 |
| 12 | 自动异地备份 | 20 分钟 | 云端能看到最新的备份文件 |
参考文章里的「登录安全问题」和「闲置自动登出」,我没放进清单。
- 安全问题的作用已经被 2FA 完全替代,而且体验更好。
- 自动登出主要防的是「电脑没锁屏被人动」,个人站长用处不大。多人共用电脑的团队可以自己加。
做完这 12 项,也不代表一劳永逸。每个月抽 10 分钟看看三件事:Wordfence 扫描报告、插件更新情况、备份是不是还在正常跑。安全这件事,靠的是持续的小习惯,而不是一次性的大动作。