搜索全站
安全防护 11 分钟阅读

WordPress 两步验证 2FA 配置:插件选择与被锁定的自救方法

密码泄露是 WordPress 被入侵的首要原因,两步验证能直接堵死这条路径。本文对比四款主流 2FA 插件、讲清 TOTP 的工作原理、强制管理员开启的配置方法,以及手机丢了进不去后台的三种自救方案。

U
UFO_PF 2020-05-16 · 阅读 11 分钟
Wo 安全防护
阅读提示
本文约 4,148 字,预计阅读 11 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:密码对了也没用

WordPress 被入侵的最常见路径是撞库——黑客从其他站点的泄露库里拿到账号密码组合,批量尝试登录你的后台。如果你的管理员密码恰好在其中(或者足够弱),后台就被拿下了。

两步验证(2FA,Two-Factor Authentication)的作用就是:即使密码泄露,攻击者没有第二重凭证也进不去。

对有后台管理权限的站点来说,这是投入产出比最高的一项安全配置——十分钟配置,能挡住绝大多数自动化入侵。

原理分析:TOTP 是什么

WordPress 的 2FA 主流实现是 TOTP(Time-based One-Time Password,基于时间的一次性密码),RFC 6238 标准。

原理:

  1. 你第一次配置时,插件生成一个密钥(secret),用二维码展示给你;
  2. 你的验证器 App(Google Authenticator、Microsoft Authenticator、1Password、微信小程序”二次验证码”)保存这个密钥;
  3. 之后每 30 秒,App 用 HMAC-SHA1(密钥, 当前时间戳/30) 算出一个 6 位数;
  4. 服务端用同样的密钥和同样的时间窗口算一遍,一致就通过。

关键点:

  • 服务端和客户端不需要联网,靠的是共享密钥 + 时间同步;
  • 时间必须同步,手机时间误差超过 30 秒就会验证失败;
  • 密钥只出现一次(配置时),所以必须同时保存备用恢复码。

这就是”手机丢了怎么办”这个问题的根源——密钥在手机上,没备份就恢复不了。

保姆级实操

一、插件选择

插件 特点 适合
Two Factor(官方) WordPress 核心团队维护,轻量,支持 TOTP 和邮件验证码 追求稳定、不想装重型插件
Wordfence Login Security 集成在 Wordfence 里,功能最全,支持强制角色开启 已经装了 Wordfence 的站点
Google Authenticator – WPOTP 简单,只做 TOTP 轻量需求
miniOrange 2FA 功能最多(支持短信、推送、硬件密钥),免费版有限制 企业级需求
WP 2FA 支持 TOTP、邮件、YubiKey,可强制角色 多用户站点

推荐组合:普通站点用 Two Factor(官方出品,无商业捆绑)或 WP 2FA;已经用 Wordfence 的直接开它自带的。

二、配置步骤(以 Two Factor 为例)

  1. 后台 插件 → 安装插件 → 搜 “Two Factor” → 安装启用;
  2. 用户 → 个人资料 → 页面下方 “Two Factor Options”;
  3. 点 “Enabled” 下的 TOTP(Time Based One-Time Password);
  4. 页面出现二维码 → 用验证器 App 扫码;
  5. App 显示 6 位数 → 填进 “Authentication Code” 框 → 点 Submit;
  6. 页面显示一串备用恢复码(Backup Codes),务必复制保存(存密码管理器或打印);
  7. 点 “Update Profile” 保存。

下次登录就会要求输入验证码。

三、强制所有管理员开启

光”建议”没用,客户和同事不会主动开。用 WP 2FA 插件可以配置强制策略:插件设置 → 选择”强制 TOTP” → 指定角色(administrator)→ 给一个宽限期(比如 7 天),超时未配置的用户会被限制登录。

代码方式(配合 Two Factor 插件):

// 未启用 2FA 的管理员,登录后强制跳转到个人资料页
add_action( 'admin_init', function() {
    if ( ! class_exists( 'Two_Factor_Core' ) ) {
        return;
    }
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    $screen = get_current_screen();
    if ( 'profile' === $screen->id ) {
        return;   // 已在个人资料页,不跳
    }
    $user_id = get_current_user_id();
    if ( ! Two_Factor_Core::is_user_using_two_factor( $user_id ) ) {
        wp_safe_redirect( admin_url( 'profile.php#two-factor-options' ) );
        exit;
    }
});

四、只给管理员开(不给编辑开)

多作者的站点,给所有编辑强制 2FA 会引发大量抱怨。务实做法是只强制 administrator 角色,编辑和作者建议但不强制。

五、验证器 App 选择

  • 国内可用:Microsoft Authenticator、1Password、Authy、微信小程序里的验证器;
  • Google Authenticator 在国内需要能访问 Google 服务才能装(已装的能用);
  • 不要用短信验证码做主要方式(SIM 卡交换攻击),只作为兜底。

六、三种自救方案(手机丢了 / 验证码失效)

方案 A:用备用恢复码登录(首选)

登录页输入用户名密码后,会有一个 “Use a backup code” 的链接,点进去输入之前保存的恢复码。

所以配置时的恢复码必须保存好——这是最省事的自救方式。

方案 B:用 WP-CLI 关闭某个用户的 2FA

有 SSH 权限的话最快:

# Two Factor 插件:删除用户的 TOTP 密钥 meta
wp user meta delete 1 _two_factor_totp_key
wp user meta delete 1 _two_factor_backup_codes
wp user meta list 1 --keys=_two_factor_totp_key

WP 2FA 插件:

wp user meta delete 1 wp_2fa_totp_key
wp user meta list 1 | grep 2fa

方案 C:数据库直接删

SELECT user_id, meta_key FROM wp_usermeta
WHERE meta_key LIKE '%two_factor%' OR meta_key LIKE '%2fa%';

DELETE FROM wp_usermeta
WHERE user_id = 1 AND meta_key IN ('_two_factor_totp_key','_two_factor_backup_codes','_two_factor_provider');

方案 D(终极):重置管理员密码

如果连密码也忘了:

wp user update 1 --user_pass=NewStrongPassword123
wp user list --fields=ID,user_login,roles

七、时间不同步导致验证码错误

这是最常见的”验证码一直不对”的原因。

# 服务器时间
date
# 服务器时区
wp option get timezone_string

手机端:验证器 App 一般有”同步时间”功能(Google Authenticator 设置里有 “Time correction for codes”)。

服务器校准:

sudo timedatectl set-timezone Asia/Shanghai
sudo apt install -y ntpdate && sudo ntpdate -u ntp.aliyun.com

八、临时关闭 2FA(调试/迁移时)

在 wp-config.php 里加:

// 紧急情况临时禁用插件(会禁用所有插件)
// 更精准的做法是通过数据库或 CLI 删 meta

更精准的做法就是用上面的 wp user meta delete。

常见踩坑与失败案例

  1. 案例一:管理员配了 2FA 但没保存恢复码,换手机后彻底进不去后台,最后只能进数据库删 meta。
  2. 案例二:服务器时间比实际快了 5 分钟,所有人的验证码都失效。校准 NTP 后恢复。服务器必须配 NTP 时间同步。
  3. 强制 2FA 后客户投诉:客户不懂配置,被拦在门外。正确做法是先发一份图文配置说明,再给 7 天宽限期,宽限期内不拦截。
  4. 多站点:子站的用户 2FA 配置是独立的(存在各自的 wp_X_usermeta),要分别配。
  5. 案例三:装了两个 2FA 插件,两个都启用,登录时要输两次验证码,偶尔冲突导致登录失败。只装一个。
  6. 备份恢复后 2FA 失效:TOTP 密钥存在 wp_usermeta 里,恢复备份会恢复到旧密钥,只要手机上的还在就没事。
  7. 应用密码和 2FA 的关系:开启 2FA 后应用密码仍然可用(它是独立的凭证体系),这不影响自动化脚本(如阶段 3 的发布脚本),但也意味着应用密码本身要保管好。

总结

两步验证是防撞库最有效的手段,配置只需十分钟。选型上普通站点用官方 Two Factor 或 WP 2FA,已装 Wordfence 的直接用它的 Login Security。三条必须遵守的纪律:配置时一定保存备用恢复码;服务器配 NTP 时间同步(时间漂移会导致验证码全失效);只强制管理员角色,编辑作者建议不强制以免引发抵触。自救手段按优先级:恢复码 → wp user meta delete 删 TOTP 密钥 → wp user update 重置密码。最后提醒:开启 2FA 后应用密码仍然可用,脚本发布不受影响。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。