Rufat Nuriyev 已更新

表单与机器人的限流、队列和反垃圾

由金属和玻璃制成的多级过滤器

限流(rate limit队列反垃圾是三层防护 - 没有它们,表单和 Telegram/Discord 机器人很快会变成垃圾、刷屏和 DoS 的通道。单靠 CAPTCHA 不够:需要频率限制、异步处理,以及对内容和信誉的过滤。下面 - 如何在不过度复杂的前提下,为网站和机器人搭一套可落地的方案。

  • Rate limit - 同一 IP、账号或令牌在时间窗口内允许多少次请求
  • 队列 - 接收请求与重活(邮件、CRMLLMwebhook)之间的缓冲
  • 反垃圾 - honeypot、CAPTCHA、启发式、黑名单和内容检查
  • 原则 - 先压频率并异步处理,再加强过滤器
  • 目标 - 留住真人线索,并在僵尸网络冲击下保持服务可用
  • 对企业意味着什么 - CRM 和邮箱里的垃圾更少,短信/LLM/API 账单更低,销售只看到真实线索

分拣轨道上排列整齐的几何块队列

为什么表单和机器人最先被打

公开接口等于没上锁的门。垃圾机器人会扫 /contact/api/lead 和机器人 webhook,然后海量投递:钓鱼、SEO 垃圾、撞库、暴力破解优惠码。没有限制时,邮件/短信/LLM 账单上涨,CRM 被垃圾填满,真实线索淹没在噪声里。

常见症状:

  1. 表单 POST 暴增,销售转化却为零
  2. 不同 IP 发相同文案 - 或同一网段发「各不相同」的垃圾
  3. 邮件或 webhook 队列撞上服务商限额
  4. 即时通讯机器人应答变慢或超时

Rate limit:限制什么、怎么限

限流回答的是:「这个接口在 N 秒内可以被打多少次?」限流键很关键。

适用场景 风险
IP 匿名表单、无鉴权 webhook NAT 与企业网会误伤好人
User / chat_id 已登录 API 与机器人 登录前无效
API 令牌 / 会话 合作方集成 令牌被盗会耗尽整份额度
Fingerprint + IP 强表单反滥用 实现与对用户解释更难

实用窗口:

  • 线索表单: 每 IP 每 10 分钟 3-5 次成功提交,并对失败(校验失败、CAPTCHA 失败)设更严上限
  • 登录 / OTP: 单独且更严 - 否则容易被爆破
  • 机器人命令: 每个用户每隔几秒允许 1 次重应答(生成、搜索);轻命令可更松
  • 进程或 worker 的全局上限 - 即使键不同,也能扛住尖峰

超限时:返回 HTTP 429Retry-After;在机器人里简短提示「请等待 N 秒」,不要暴露内部阈值。记录触发日志:可以看出限额偏松还是偏紧。

队列:为何要把接收与处理分开

表单不应同步写 CRM、生成 PDF 再调外部 API。队列(Redis、RabbitMQ、SQS、Celery、BullMQ)在校验后立刻接任务,并向用户快速返回:「请求已受理」。

队列带来的收益:

  • 削峰 - 垃圾或投放高峰不会拖垮 Web 进程
  • 失败重试 - 带 backoffretry,而不是丢线索
  • 优先级 - 已付款订单高于「下载 PDF」
  • 隔离 - LLM/邮件 worker 与前端独立扩缩

表单流程:

  1. CSRF / origin、honeypot、字段基础校验
  2. Rate limit
  3. 将线索写入数据库,状态为 queued
  4. 推入队列
  5. 向用户返回 HTTP 200/202
  6. Worker:反垃圾打分 → CRM / 邮件 / 通知

机器人同理:快速接收 Telegram 更新;重应答(RAG、出图、解析)进队列。否则 long polling / webhook 延迟会堆积。

反垃圾:多层,而不是一个勾选框

一个 reCAPTCHA 解决不了问题。要做纵深防御

1. 入口处的廉价过滤

  • Honeypot 字段(对人隐藏,机器人会填)
  • 最短填写时间(过快 = 机器人)
  • 校验 Referer / Origin 与 CSRF 令牌
  • 限制请求体大小与附件数量

2. CAPTCHA 与挑战

信号展示挑战,而不是永远展示:N 次尝试后、可疑 IP、高分风险。常驻 CAPTCHA 伤转化;按需几乎不伤。

3. 内容与信誉

  • 文案中的域名/URL 黑名单
  • 识别重复模板与跨语言垃圾
  • 邮箱检查(MX、一次性域名)
  • 机器人侧:链接过滤、停用词、媒体上限

4. 行为信号

历史:该设备提交有多少变成成交或有意义对话。新 IP 一分钟内几十条「buy SEO」应进隔离区或人工审核,而不是直接进销售 CRM。

如何把三层串起来

生产环境建议顺序:

  1. 校验与廉价反垃圾(honeypot、大小、CSRF)
  2. 按 IP + 用户/chat id 限流
  3. 快速响应客户端 / 即时通讯
  4. 队列,并为每个 worker 设并发任务上限
  5. 在 worker 中做重反垃圾与集成(打分、CRM、邮件)
  6. 告警:429 尖峰、被拒任务增长

这样就不会把 CPU 和服务商预算浪费在本该被限额挡住的请求上。

落地检查清单

  • [ ] 表单与机器人按风险设置不同限额
  • [ ] 对外邮件/短信/LLM 有全局熔断
  • [ ] 429 与机器人提示对人清晰,但不暗示如何绕过
  • [ ] 队列有 DLQ(死信)与长度监控
  • [ ] 可疑线索进隔离区,而不是静默删除
  • [ ] 限流与垃圾分日志可按 IP/哈希、endpoint 和 score 排查,无需完整访问个人数据(姓名、邮箱、电话、申请正文)
  • [ ] 压测:/contact 在 100 RPS 时会发生什么

什么时候还不用做这么复杂

不是每个项目都要一开始就上全套方案:

  • 没有表单或机器人的静态网站 - 没什么可防护的,不需要限流
  • 每天线索不到 10-20 条且不调用外部 API/LLM - 托管/CDN 层面的验证码加限流(Cloudflare、Nginx)就够了,单独上队列还不划算
  • 早期 MVP - 先验证市场是否需要这个产品,等流量和真实攻击增多后再加反垃圾和队列
  • 已经有托管防护(Cloudflare、WAF、自带反垃圾的表单)- 先用足它的限流和过滤,不要从零重复建设

如果流量和集成数量增长,再回到上面的完整方案。

小结

限流压频率,队列护住后端与集成预算,反垃圾把垃圾与线索分开。三者必须一起用:有限额无队列仍会打垮同步处理;有队列无过滤会把垃圾灌进 CRM;有过滤无限额在 DDoS 下会变得很贵。

若需要按你的技术栈设计表单与机器人防护(限额、队列、隔离区、监控)- 请联系我。支持与迭代参考见价格页

常见问题

限流和反垃圾有什么区别?

限流数次数;反垃圾看内容与行为。 限额即使面对「干净」请求也能挡住刷屏;反垃圾能抓住次数不多但仍有毒的垃圾。

线索量很少还需要队列吗?

需要,只要有外部 API、邮件或 LLM。 即便流量低,同步 CRM 超时也会毁掉表单体验。队列空闲时成本低,峰值时能救命。

每个表单都必须上 CAPTCHA 吗?

不必。 更宜按风险展示挑战:错误连发后、IP 信誉差、或异常分数时。少打扰真人,仍能挡机器人。

机器人按 chat_id 限还是按 IP 限?

两个都要。 chat_id 挡住单用户刷屏;IP/webhook 令牌防御伪造更新与扫描。群组限额通常比私聊更严。

看起来像垃圾的线索怎么办?

进隔离区做人工复核或延迟投递,不要无痕迹丢进垃圾桶。否则会丢掉偶发真线索,也看不到攻击模式如何演变。

本文术语

rate limit — cap on how many requests are allowed per time window — 单位时间内允许的请求上限

CRM — Customer Relationship Management — 客户关系管理

webhook — HTTP callback when an event happens — 事件发生时触发的 HTTP 回调

LLM — Large Language Model — 大语言模型

worker — background job processor

Celery — Python task queue for background jobs — Python 后台任务队列

backoff — growing wait between retries after failures — 失败后重试间隔逐渐加长

long polling — client waits on an open request until the server has news — 客户端保持请求打开直到服务端有消息

retry — automatic repeat of a failed request or job — 失败请求或任务的自动重试

CSRF — Cross-Site Request Forgery — 跨站请求伪造

RAG — Retrieval-Augmented Generation — 检索增强生成

endpoint — specific API URL that accepts requests — 接受请求的具体 API 地址

CDN — Content Delivery Network — 内容分发网络

MVP — Minimum Viable Product — 最小可行产品

DDoS — Distributed Denial of Service — 分布式拒绝服务攻击

WAF — Web Application Firewall — Web 应用防火墙

联系方式