WP Manifestindependent plugin directory
manifest / security / wpc-yanzheng

登录安全验证 (Login Verify)

在 WordPress 后台登录与 WooCommerce 账户登录时弹出人机验证(滑块拖动 / 算术题 / 图形验证码)。前端弹窗验证,后端一次性令牌强校验,绕过 JS 无法登录。默认仅保护后台登录。

by shibanyu · github.com/shibanyu333/wpc-yanzheng

★ 0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/shibanyu333/wpc-yanzheng/archive/refs/heads/main.zip

在 WordPress 后台登录和 WooCommerce 前台登录时弹出人机验证,阻挡自动化爆破。默认只保护后台。

Description

用户点击「登录」后弹出验证层,通过后才真正提交登录表单。

三种验证方式,后台可切换:

  • 滑块拖动(默认)—— 按住滑块拖到最右侧,体验最好
  • 算术题 —— 计算 7 + 5 = ?,最轻量,无依赖
  • 图形验证码 —— GD 绘制的扭曲字符图片,抗自动识别最强

安全模型

前端弹窗只是交互层,真正拦截在服务端:

  1. 验证通过后,服务端签发一个一次性通行令牌(有效期 5 分钟)。
  2. 令牌随登录表单提交。
  3. authenticate 过滤器在校验密码之前先消费令牌,无效则直接拒绝。

因此禁用 JavaScript、直接构造 POST、用工具批量爆破都无法绕过。令牌用后即焚,无法重放。

拦截发生时会摘掉核心的密码校验器,所以被拦的请求不会消耗一次密码哈希运算,也不会泄露「这个用户名是否存在」。

其它防护

  • 单次验证答错超过设定次数即作废,需重新获取
  • 滑块会检查拖动耗时,瞬时完成判定为脚本
  • 单 IP 每分钟最多 40 次验证请求
  • 挑战与令牌都存 transient,并有定时任务清理过期残留

Installation

  1. 把 login-verify 目录上传到 /wp-content/plugins/。
  2. 在「插件」页面启用。
  3. 到「设置 → 登录安全验证」调整验证方式与保护范围。

默认只保护 wp-login.php。WooCommerce 的「我的账户」和结账页登录需要手动勾选开启。

Frequently Asked Questions

被锁在后台外面了怎么办?

在 wp-config.php 中加入:

define( 'LV_DISABLE', true );

所有登录验证会被临时放行。处理完问题后删掉这一行。

服务器没有 GD 扩展会怎样?

选择「图形验证码」时会自动降级为算术题,不会出现空白验证码。设置页也会给出提示。

会影响 XML-RPC、REST API 或应用密码登录吗?

不会。插件只拦截 wp-login.php 和 WooCommerce 登录表单这两个入口,其它认证路径一律放行。

站点在反向代理后面,限流会不会误伤?

限流只读 REMOTE_ADDR(X-Forwarded-For 可伪造,用它做限流等于没做)。如果所有请求的 REMOTE_ADDR 都是反代 IP,请在反代侧或用插件把真实 IP 写回 REMOTE_ADDR。

Changelog

1.0.0

  • 首个版本:滑块 / 算术题 / 图形验证码三种方式,一次性令牌服务端校验,支持 wp-login.php 与 WooCommerce 登录。