所有文章

WordPress 双重验证登录:验证器代码、通行密钥,以及如何避免把自己锁在门外

WordPress 的第二步登录验证如何工作,验证器代码与通行密钥有何不同,如何免费设置,以及在有人丢手机之前要准备什么。

Radek,ENSOMEDIA发布于 5 分钟阅读In EnglishPo polskuAuf DeutschEn españolEn françaisبالعربية

WordPress 默认只要求用户名和密码,别无其他。双重验证登录增加了第二步:输入密码之后,你要输入手机应用里的验证码,或者用通行密钥确认登录。单靠一个密码就不再能打开后台。你可以用 WordPress.org 目录里的插件免费设置,每个账号只需几分钟。

本指南介绍第二步验证的种类,如何评判它们,如何在有多个用户的网站上推行,以及在有人丢手机之前要准备什么。

密码很强,为什么还要这么做

强密码可以挡住猜测。但在三种常见情况下,它没有用:

  • 同一个密码在另一项服务上用过,而那项服务泄露了它,
  • 有人把它输入了邮件里链接的假登录页面,
  • 它被保存在多人共用的电脑的浏览器里。

这几种情况下,别人都知道了密码。有了第二步,光知道密码,不足以进入后台。

三种第二步验证

验证器应用生成的代码(TOTP)。 设置时,你用手机上的应用扫描二维码。此后应用会显示一个六位数代码,每 30 秒变一次。手机不需要联网:代码由保存的密钥和当前时间计算得出。所有常见的验证器应用都支持。

弱点:代码可以像密码一样被输入到假登录页面,动作快的攻击者可以在它过期之前使用。

通过邮件发送的代码。 很方便,因为不用安装应用。但它的强度只相当于邮箱本身。如果邮箱和 WordPress 用同一个密码,第二步几乎没增加什么。

通行密钥(WebAuthn 标准)。 你不用输入代码,而是用指纹、人脸、手机 PIN 或 USB 安全密钥来确认。浏览器会把每个通行密钥绑定到创建它的域名。在另一个域名下的相似页面上,浏览器根本不会提供这个通行密钥,所以没有什么可偷的。通行密钥要求网站通过 HTTPS 运行。

不用付费插件能做到吗

可以。WordPress.org 高级管理手册(2026 年 10 月 14 日更新版)指向目录中用于两步登录的插件,因为 WordPress 本身不包含这项功能。有好几款免费插件可以做到。举一个例子:2026 年 10 月 19 日,Two Factor 插件(作者 WordPress.org,版本 0.17.0)在 WordPress.org 的页面上列出了验证器应用代码、邮件代码和备用代码,并说明 WebAuthn 通行密钥支持是一个单独的附加组件。

安装之前,在它的说明里找四件事:

  1. 它支持哪些第二步验证方式,验证器应用是否在其中。
  2. 它是否提供用于手机丢失的恢复代码。
  3. 有服务器访问权限的人,能否为被锁住的账号关闭第二步。
  4. 它能否对选定的角色强制要求第二步。

推行时不要把任何人锁在门外

  1. 先从你自己的账号开始。 好的插件只有在你于设置期间输入了一个有效的代码之后,才开始要求代码。这样在有任何东西依赖它之前,就先确认了应用生成的是正确的代码。
  2. 恢复代码不要放在手机里。 密码管理器是个好地方。和应用存在同一部手机上的代码,会随手机一起丢失。
  3. 决定谁来救被锁的账号。 弄清楚谁有服务器访问权限(你、你的开发者、你的主机商),以及他们如何在那里为某个账号关闭第二步。在需要之前就写下来。
  4. 对有权限的角色强制要求。 管理员、编辑和商店经理可以修改网站或查看客户数据。给他们几天时间设置,并先通过邮件告诉他们。
  5. 把应用改用应用密码。 WordPress 手机应用,或通过 REST API 发布内容的工具,无法显示输入验证码的界面。WordPress 为此提供了应用密码:在用户资料里为某一个工具单独创建密码,可以随时撤销。
  6. 终止旧会话。 WordPress 让你保持登录两天,勾选“记住我”则为 14 天。开启第二步之后,让该账号在其他设备上退出登录,这样旧会话就不会绕过新规则。

需要留意的事

  • 手机的时钟。 应用生成的代码取决于时间。如果代码突然失效,检查手机是否设置为自动同步时间。
  • 新域名。 通行密钥只对创建它的域名有效。把网站迁到新地址之后,你需要添加新的通行密钥,所以要保留应用或恢复代码作为另一种进入方式。
  • 有人离职。 删除他的账号或收回角色。关掉他的手机并不能关闭他的账号。
  • 它只保护登录,别的不管。 过期插件里的漏洞不需要登录。更新仍然重要,详见关于过期 WordPress 插件的文章。

Ensomedia Security 的做法

Ensomedia Security 是我为 ShieldWave 做的一款免费插件,收录在 WordPress.org 目录中。其中所有功能在没有 ShieldWave 账号时同样可用。以下事实来自它的介绍页和代码:

  • 第二步是验证器应用代码(TOTP),设置时会得到十个恢复代码,
  • WP-CLI 命令 wp shieldwave two-factor disable <user> 可为某一个账号关闭它,所以没有人会被永久锁住,
  • 应用使用应用密码登录,
  • 你可以对所选角色强制要求双重验证登录,设置期限为 0 到 30 天(默认 7 天),
  • 通行密钥(WebAuthn)可作为密码之后的第二步,仍然需要密码。它们需要 HTTPS 和 PHP 中的 OpenSSL 扩展,
  • 因为浏览器把通行密钥绑定到网站的域名,相似的登录页面最多只能拿到密码,永远拿不到第二步,
  • 添加或移除通行密钥时,会先要求输入密码或当前代码,添加通行密钥时账号所有者会收到一封邮件,
  • 会话部分显示该账号在哪里登录,可以让你在其他地方退出登录或让所有用户退出登录,并设置管理员会话持续多久,
  • 登录保护限制每个地址的失败登录次数(默认 5 次,然后冷却),以及每个用户名在所有地址上的失败次数(默认每小时 20 次)。锁定是暂时的,可信地址永远不会被锁定。

它不是完整的 Web 应用防火墙,也不会清除文件里的恶意软件。插件页面列出了每项可选服务会发送什么,逐屏指南逐项讲解了各项设置。

今天的简短清单

  1. 为你自己的管理员账号开启第二步,把恢复代码放进密码管理器。
  2. 弄清有人丢手机时,如何为某个账号关闭它。
  3. 对所有能修改网站的角色强制要求,并给几天时间设置。
  4. 给工具和应用各自的应用密码。
  5. 让你的账号退出你不再使用的设备。

从外部检测你的网站。 在 shieldwave.io 输入你的网址。大约需要 90 秒,不需要密码,也不需要安装插件。