按框架
WordPress 安全 — 生产环境加固实务参考
一份 WordPress 生产环境加固实务参考:按优先级排序的检查清单,外加更新、插件/主题管理、管理员双因素认证、降低管理后台暴露、wp-config 与密钥、文件、备份等各领域指南,并附一份自我验证清单。纯防御视角,不含任何攻击步骤。适合正在运营 WordPress 站点、想把生产环境真正加固到位的人从头到尾照着做。
适合对象:任何运营 WordPress 站点的人。这里不含攻击步骤——这是一份用于加固的可上手实务参考:按优先级排序的检查清单、分领域指南和自我验证。跨框架的整体图景,见 按框架分类的安全入口。
按优先级排序的加固检查清单
从上往下逐条落实这张表。P0 是最高优先级,P1 是最高频的事故来源,P2 是持续的运维卫生。
P0 ── 前提(先做这个)
自动更新 / 删除不用的插件与主题 / 强管理员 + 2FA
P1 ── 最高频的事故来源
插件最小化 / 降低管理后台暴露 / 可恢复的备份
P2 ── 运维卫生
wp-config 与密钥 / 文件权限 / HTTPS、响应头、PHP/依赖的新鲜度
| 优先级 | 控制项 | 具体做法(WordPress) |
|---|---|---|
| P0 | 自动更新 | 为核心、插件、主题启用自动更新。大版本更新前先备份 |
| P0 | 删除不用的 | 删除不用的插件/主题,别只是停用(残留文件仍是攻击目标) |
| P0 | 强管理员 + 2FA | 强密码 + 双因素。避免使用 admin 用户名;角色最小权限 |
| P1 | 插件最小化 | 安装前审查更新频率、采用规模、已知 CVE。保持数量精简 |
| P1 | 保护登录 | 登录尝试次数限制。限制 wp-admin/wp-login.php 的暴露 |
| P1 | 降低暴露 | 不用则限制 xmlrpc.php。抑制 REST API 的用户枚举 |
| P1 | 备份 | 离线/异地的可恢复备份 + 恢复演练 + 篡改检测 |
| P2 | wp-config 与密钥 | 设置认证密钥/盐值,保护 wp-config.php,生产环境禁用调试显示 |
| P2 | 文件权限 | 约 644 文件 / 755 目录。在上传目录中禁止 PHP 执行 |
| P2 | HTTPS/响应头/更新 | 强制 HTTPS、HSTS 等。让 PHP/数据库保持在受支持的版本上 |
1. 更新(最重要的防御)
对 WordPress 的攻击大多是自动化工具大规模利用某个已公开的已知漏洞(CVE)。 所以更新速度是你最大的防御。
- 为核心、插件和主题启用自动更新——在漏洞被利用之前就关闭已公开的缺口。
- 对重要站点,在预演环境(staging)中验证大版本更新,并更新前先备份。
- 一次被拖延的更新,就是自动化攻击敞开的入口。别想着「以后再做」。
2. 插件和主题(攻击面)
第三方代码的漏洞是最大的入口。关键是保持数量精简,绝不放任不管。
- 对任何不用的东西,删除而非停用(停用的文件仍可能成为攻击目标)。
- 安装前,检查更新频率、采用规模、最近更新日期和已知 CVE。 避开已被弃维护的。
- 你可以用 CVE/KEV 查询 检查插件的 CVE。扩展越少,意味着更新责任越轻、攻击面越小。
3. 管理员账户与认证
大多数账户接管,都是针对弱口令/复用管理员账户的暴力破解,或对泄露密码的复用。
常见(危险)
- 用户名
admin+ 弱密码 + 没有 2FA - 所有人都是管理员(没有角色区分)
- 登录尝试次数不受限
wp-admin从任何地方都能访问
正确
- 强密码 + 2FA,用户名不用
admin - 最小权限角色(恰当使用编辑者/作者)
- 登录尝试次数限制(遏制暴力破解)
- 尽可能限制
wp-admin/wp-login.php的访问来源
如何选择 2FA,见 什么是 2FA;瞄准管理员的路径,见 什么是钓鱼攻击。
4. 降低暴露(管理面与信息泄露)
攻击者会先找一个「可用的入口」。砍掉不用的功能和不必要的信息泄露。
- 加上登录尝试次数限制,削弱暴力破解的有效性。
- 不用则限制
xmlrpc.php(它可能成为暴力破解放大和大流量请求的入口)。 - 抑制 REST API 的用户枚举(防止通过
?author=等泄露管理员名)。 - 禁用目录列表,减少不必要的版本信息泄露。
- 从管理后台禁用文件编辑(
DISALLOW_FILE_EDIT),让入侵后的篡改更难得逞。
5. wp-config 与密钥(P2)
- 设置唯一的认证密钥/盐值,并以恰当权限保护
wp-config.php(绝不让它对所有人可读)。 - 把数据库凭据之类的密钥挡在公开面之外。别把备份或导出文件留在公开目录里(→ 别把密钥放进公开目录)。
- 在生产环境中禁用调试显示(
WP_DEBUG_DISPLAY关闭)。别通过报错泄露内部信息。
6. 文件与上传(P2)
- 文件权限大致为644 文件 / 755 目录,
wp-config.php更严。绝不让任何东西对所有人可写。 - 不允许在上传目录中执行 PHP(防 Web Shell)。校验上传的类型和大小。
- 用篡改检测(文件变更监控)尽早发现入侵后的改动。
7. HTTPS、响应头、备份(P2)
- 强制 HTTPS + HSTS。 解决混合内容问题。
- 添加安全响应头(用 安全响应头检测 检查你自己的站点)。
- 保持离线/不可篡改的备份 + 恢复演练,让你能真正恢复(→ 备份要点)。这是抵御勒索软件和篡改的最后一道防线。
8. 托管与依赖(P1–P2)
- 让 PHP 和数据库保持在受支持的版本上。 别把已到 EOL 的版本一直摆着不管。
- 了解你的托管环境的补丁状态(在共享托管上,这还包括服务商的响应)。
- WAF 只是补充——先把地基(更新、最小化、认证、备份)夯实。
验证:你的 WordPress 真的加固了吗?
搭好了并不算完——只有检查过才算完成。以下是针对你自己站点的防御性自查。
密钥和配置没有暴露
/wp-config.php 不会返回其内容,且备份(.zip/.sql)或 .env 类文件无法通过 URL 获取。管理员名和版本没有泄露
?author=1 之类不会暴露管理员用户名,且目录列表已关闭。登录保护和 2FA 生效
admin 用户。更新、备份、响应头
本站观点:管理的是「扩展与放任」,不是核心
对 WordPress 真正有效的,不是花哨的配置,而是「别过度添加扩展、别放任不管」这条运维纪律。 插件很方便,但每加一个都会多一份持续更新的责任。防守的重心,是把上面这张表从上往下逐条落实——把更新自动化、把插件保持最少、用强认证和可恢复的备份来守住。 看起来是 WordPress 专属,实则是普遍地基(依赖新鲜度、公开面最小化、认证、恢复)的应用。
延伸阅读
- 入口:按框架分类的安全 · Laravel 安全
- 实务:漏洞响应实操手册 · 备份要点
- 密钥/认证:别把密钥放进公开目录 · 什么是 2FA · 什么是钓鱼攻击
- 工具:安全响应头检测 · CVE/KEV 查询
FAQ
Q要保护 WordPress,我应该先做什么?
三件 P0 事项:(1) 为核心、插件和主题启用自动更新,让已公开的已知漏洞(CVE)在被利用之前就被关闭;(2) 删除(而非仅停用)不用的插件/主题,缩小攻击面;(3) 用强密码和双因素认证(2FA)保护管理员账户,并避免使用 admin 这个用户名。仅这三条就能挡住大多数自动化攻击。接下来再降低管理后台暴露并设置备份。
Q插件装多少算太多?
原则是「只装你真正需要的最少数量」。每个插件都会增加攻击面和「持续更新的责任」。安装前先检查更新频率、采用规模、最近更新日期和已知漏洞;对任何不用的插件,删除而非停用(停用的文件仍可能成为漏洞攻击目标)。主题同理。
Q我应该禁用 xmlrpc.php 吗?
如果你不用它,建议限制或禁用。xmlrpc.php 用于远程发文和 pingback,但它也可能成为暴力破解放大和大流量请求的入口。如果你确实用到需要它的功能(某些应用集成),就把它限制到你需要的方法,或用速率/IP 限制来保护它。先确认你到底有没有真正用到它。
Q装个安全插件就安全了吗?
安全插件有帮助,但不是万能药。在地基(自动更新、插件最小化、强管理员认证、备份、降低管理后台暴露)都缺失的情况下硬加一个插件,堵不住漏洞。先把本页的检查清单做一遍,再用插件来补充登录尝试次数限制和篡改检测之类的功能。
Q最低限度要做什么?
(1) 自动更新;(2) 删除不用的插件/主题;(3) 给管理员配强密码 + 双因素认证;(4) 登录尝试次数限制并降低管理后台暴露;(5) 可恢复的离线备份 + 篡改检测。这五条能挡住大多数自动化攻击。细节见上方的检查清单和各章节。