location = /wp-comments-post.php {
    limit_req zone=comment burst=2 nodelay;
    limit_req_status 429;
}

后台待审核评论一晚上涨到三千多条,正文都是几句英文加一个博彩站链接,IP 集中在两个 C 段,提交间隔不到一秒。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,评论表单只靠前端校验,直接 POST 就能提交。没有 nonce、没有频率限制、也没有隐藏字段,脚本跑一轮就能把待审队列灌满。

「评论垃圾拦截」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:先关掉旧文章的评论,后台讨论设置里按天数批量关闭;主题评论表单加一个隐藏字段做蜜罐,填了内容直接丢弃;nginx 层对 wp-comments-post.php 限速,单 IP 每分钟两条。

改完只确认一件事:再跑一遍提交脚本,第二条开始返回 429,待审核数量不再暴涨。

作者 9823189