反馈表单一天进了 2400 条提交,内容都是同一段英文加三个链接,后台列表翻十页都翻不完。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,表单没有验证码,也没有频率限制,提交接口公开可打。机器人照着字段名直接 POST,一次能跑几百条。

「反馈表单被灌」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。改完顺手把文档补一句,省得下次自己重新推一遍。

if (!empty($_POST['website'])) { wp_die('', 403); }
$k = 'fb_' . md5($ip);
if (get_transient($k) > 5) { wp_die('', 429); }

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,加一个 honeypot 隐藏字段,正常用户不会填;同一 IP 十分钟超过 5 次直接拒绝,用 transient 计数;内容里链接超过两个的进待审队列,不直接展示。

最后用这个标准收尾,脚本连续提交 10 次,第 6 次开始返回 429,正常用户提交不受影响。

作者 9823189