wordpress留言防刷可不依赖插件,通过客户端数学题+js校验、服务端session比对与过期控制、ip+行为双维度限流三道防线协同实现;ci4 throttler可原生用于评论接口限流,键含ip与ua上下文,且仅对通过验证码的请求生效。

WordPress 留言防刷不依赖插件,也能做到;CodeIgniter 4.7.0 的 Throttler 限流机制则可原生实现接口级防护。二者思路相通:前端轻量验证 + 后端严格限流,关键在“耦合”而非“堆砌”。
WordPress 留言表单不装插件的防刷组合
核心是三道防线同步生效,缺一不可:
-
客户端数学题 + JS 实时校验:用
rand()生成两个一位数加法,答案存入$_SESSION并用md5()加密(防 Session 劫持后直接伪造),提交前通过 JS 验证输入是否为数字和等式结果,避免无效请求直达服务器 -
服务端二次比对 + 过期控制:在
wp-comments-post.php中读取加密后的 Session 值,对用户输入做同样md5((string)($a + $b))运算后比对;同时检查 Session 是否过期(建议设 5 分钟),超时即拒绝 - IP+行为双维度限流:不只看 IP,还要结合留言内容特征(如含链接数、关键词密度)做简单评分;同一 IP 10 分钟内超过 3 条未登录留言,自动进入审核队列,不进数据库也不发邮件
CI4 Throttler 在留言接口中的原生落地
若你用 CI4 接管 WordPress 的评论 API(例如通过 REST 路由接收留言),可直接复用其 Throttler 类,无需 Redis 或额外扩展:
-
限流键设计要带业务上下文:比如
comment:ip:'.$this->request->getIPAddress().':ua:'.$this->request->getUserAgent(),避免单纯按 IP 计数误伤公用网络用户 -
check() 和 getRemainingTime() 必须顺序调用:先
$this->throttler->check($key, 5, MINUTE),返回 false 再调$this->throttler->getRemainingTime($key)获取剩余秒数,否则返回 0 - 与验证码逻辑绑定:只有通过数学题校验的请求,才进入 Throttler 检查;未通过验证码的请求直接拦截,不消耗限流配额——这是防止绕过验证暴力刷的关键
为什么不用 reCAPTCHA 或 Akismet 也能稳住
不是它们不好,而是轻量场景下容易“高射炮打蚊子”:
- reCAPTCHA 依赖 Google 服务,在国内访问不稳定,且需申请密钥、配置域名白名单,维护成本高
- Akismet 是云服务型过滤,有延迟、有误判率,且免费额度有限;一旦被标记为垃圾,真实用户也可能被挡在门外
- 原生数学题 + Throttler 组合,全部逻辑可控、无外部依赖、响应快(毫秒级)、日志清晰,适合中小流量站点快速上线并持续迭代











