开了一周开放注册,用户表多出三千个邮箱格式乱写的账号,几乎都是同一分钟批量进来的,全靠人工清理。乍看像缓存或者权限的锅,追下去往往不是。

$k = 'reg_' . md5($_SERVER['REMOTE_ADDR']);
$n = (int) get_transient($k) + 1;
if ($n > 5) $e->add('too_many', '过于频繁');
set_transient($k, $n, 600);
return $e;

追下去是这么回事:注册入口没有任何频率限制,脚本直接提交注册地址就能批量建号,简单的验证码也被绕过去了,事后只能手工清,越堆越多。

「WordPress 注册频率限制」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。

具体做法是,按来源 IP 和邮箱域名做一段固定时间窗口的计数;超过阈值就直接返回错误提示,不再写入用户表;把每一次拦截都写进日志里,便于之后回溯来源。

验收就看一点,同一 IP 连续注册超过五次被拒,正常用户不受影响,表单仍可提交。

作者 9823189