add_filter('comment_flood_filter', function($block, $time, $last){
$gap = min(300, 15 * max(1, (int)get_transient('cc_' . $_SERVER['REMOTE_ADDR'])));
return (time() - $last) < $gap;
}, 10, 3);
监控里同一个 IP 十秒内提交了六十条评论,内容各不相同,全部通过并直接显示,前台评论区被刷满三页。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,comment_flood_filter 只按 IP 和固定十五秒间隔判断,代理池一换 IP 就绕开。未登录用户的判定还依赖 Cookie,脚本根本不带。频率限制没和内容相似度结合,换个说法就过。
「评论频率限制」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。改完隔一天再看一次,当场正常不代表能稳住。
测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
处理上按这个顺序:把间隔从固定值改成按提交次数递增,第一次十五秒,之后每次翻倍;叠加一层内容相似度判断,同 IP 短时间内的近似文案直接进垃圾;对未登录用户加脚本耗时校验,低于三秒的提交判为机器。
改完只确认一件事:同一 IP 连发时第二条起被要求等待,换 IP 也会因内容近似被拦。
