输入不存在的用户名,页面提示「未知用户名」;输入 admin 加错密码,提示「密码不正确」。两种文案一眼能分清账号在不在。日志里能对上时间点,这种反而好排。
WordPress 默认把 invalid_username 和 incorrect_password 分成两条错误信息,本意是方便用户,实际给了枚举接口。登录页又没有频率限制,字典跑一遍就能筛出有效账号。这一点先确认清楚,后面就不用反复试。
add_filter('login_errors', function () {
return '用户名或密码不正确';
});
「wp-login 错误提示」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。
处理上按这个顺序:用 login_errors 过滤器把两类提示统一成一句话;同一次失败不区分账号还是密码,也别提示剩余尝试次数;配合登录失败日志,对同一 IP 连续失败做封禁。
结果对不对很好判断,两种错误输入看到的提示完全一致,页面上不再出现「未知用户名」。
