日志里同一账号一分钟调了 400 次签到接口,积分涨了 4000,前端按钮置灰完全没挡住。日志里能对上时间点,这种反而好排。

接口只靠前端禁用按钮做限制,服务端没有校验随机数和调用频率。签到流水也没有按天做唯一约束。这一点先确认清楚,后面就不用反复试。

SELECT user_id, COUNT(*) FROM wp_sign_log
WHERE DATE(created_at) = CURDATE()
GROUP BY user_id HAVING COUNT(*) > 1;

这次卡住的地方就在「积分接口防刷」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:接口加一次性随机数校验,重复提交直接拒绝;按用户和 IP 做频率限制,超过阈值返回 429;流水表按用户加日期建唯一索引,一天只能一条;异常账号先冻结积分,人工核后再放行。

结果对不对很好判断,脚本连发 50 次只有一次成功,其余返回 429 或重复提示。

作者 9823189