表单与机器人的限流、队列和反垃圾
限流(rate limit)、队列和反垃圾是三层防护 - 没有它们,表单和 Telegram/Discord 机器人很快会变成垃圾、刷屏和 DoS 的通道。单靠 CAPTCHA 不够:需要频率限制、异步处理,以及对内容和信誉的过滤。下面 - 如何在不过度复杂的前提下,为网站和机器人搭一套可落地的方案。
- Rate limit - 同一 IP、账号或令牌在时间窗口内允许多少次请求
- 队列 - 接收请求与重活(邮件、CRM、LLM、webhook)之间的缓冲
- 反垃圾 - honeypot、CAPTCHA、启发式、黑名单和内容检查
- 原则 - 先压频率并异步处理,再加强过滤器
- 目标 - 留住真人线索,并在僵尸网络冲击下保持服务可用
为什么表单和机器人最先被打
公开接口等于没上锁的门。垃圾机器人会扫 /contact、/api/lead 和机器人 webhook,然后海量投递:钓鱼、SEO 垃圾、撞库、暴力破解优惠码。没有限制时,邮件/短信/LLM 账单上涨,CRM 被垃圾填满,真实线索淹没在噪声里。
常见症状:
- 表单 POST 暴增,销售转化却为零
- 不同 IP 发相同文案 - 或同一网段发「各不相同」的垃圾
- 邮件或 webhook 队列撞上服务商限额
- 即时通讯机器人应答变慢或超时
Rate limit:限制什么、怎么限
限流回答的是:「这个接口在 N 秒内可以被打多少次?」限流键很关键。
| 键 | 适用场景 | 风险 |
|---|---|---|
| IP | 匿名表单、无鉴权 webhook | NAT 与企业网会误伤好人 |
| User / chat_id | 已登录 API 与机器人 | 登录前无效 |
| API 令牌 / 会话 | 合作方集成 | 令牌被盗会耗尽整份额度 |
| Fingerprint + IP | 强表单反滥用 | 实现与对用户解释更难 |
实用窗口:
- 线索表单: 每 IP 每 10 分钟 3-5 次成功提交,并对失败(校验失败、CAPTCHA 失败)设更严上限
- 登录 / OTP: 单独且更严 - 否则容易被爆破
- 机器人命令: 每个用户每隔几秒允许 1 次重应答(生成、搜索);轻命令可更松
- 进程或 worker 的全局上限 - 即使键不同,也能扛住尖峰
超限时:返回 HTTP 429 与 Retry-After;在机器人里简短提示「请等待 N 秒」,不要暴露内部阈值。记录触发日志:可以看出限额偏松还是偏紧。
队列:为何要把接收与处理分开
表单不应同步写 CRM、生成 PDF 再调外部 API。队列(Redis、RabbitMQ、SQS、Celery、BullMQ)在校验后立刻接任务,并向用户快速返回:「请求已受理」。
队列带来的收益:
- 削峰 - 垃圾或投放高峰不会拖垮 Web 进程
- 失败重试 - 带 backoff 的 retry,而不是丢线索
- 优先级 - 已付款订单高于「下载 PDF」
- 隔离 - LLM/邮件 worker 与前端独立扩缩
表单流程:
- CSRF / origin、honeypot、字段基础校验
- Rate limit
- 将线索写入数据库,状态为
queued - 推入队列
- 向用户返回 HTTP 200/202
- 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。
如何把三层串起来
生产环境建议顺序:
- 校验与廉价反垃圾(honeypot、大小、CSRF)
- 按 IP + 用户/chat id 限流
- 快速响应客户端 / 即时通讯
- 队列,并为每个 worker 设并发任务上限
- 在 worker 中做重反垃圾与集成(打分、CRM、邮件)
- 告警:429 尖峰、被拒任务增长
这样就不会把 CPU 和服务商预算浪费在本该被限额挡住的请求上。
落地检查清单
- [ ] 表单与机器人按风险设置不同限额
- [ ] 对外邮件/短信/LLM 有全局熔断
- [ ] 429 与机器人提示对人清晰,但不暗示如何绕过
- [ ] 队列有 DLQ(死信)与长度监控
- [ ] 可疑线索进隔离区,而不是静默删除
- [ ] 限流与垃圾分日志在无完整个人信息时仍可用
- [ ] 压测:
/contact在 100 RPS 时会发生什么
小结
限流压频率,队列护住后端与集成预算,反垃圾把垃圾与线索分开。三者必须一起用:有限额无队列仍会打垮同步处理;有队列无过滤会把垃圾灌进 CRM;有过滤无限额在 DDoS 下会变得很贵。
若需要按你的技术栈设计表单与机器人防护(限额、队列、隔离区、监控)- 请联系我。支持与迭代参考见价格页。
常见问题
限流和反垃圾有什么区别?
限流数次数;反垃圾看内容与行为。 限额即使面对「干净」请求也能挡住刷屏;反垃圾能抓住次数不多但仍有毒的垃圾。
线索量很少还需要队列吗?
需要,只要有外部 API、邮件或 LLM。 即便流量低,同步 CRM 超时也会毁掉表单体验。队列空闲时成本低,峰值时能救命。
每个表单都必须上 CAPTCHA 吗?
不必。 更宜按风险展示挑战:错误连发后、IP 信誉差、或异常分数时。少打扰真人,仍能挡机器人。
机器人按 chat_id 限还是按 IP 限?
两个都要。 chat_id 挡住单用户刷屏;IP/webhook 令牌防御伪造更新与扫描。群组限额通常比私聊更严。
看起来像垃圾的线索怎么办?
进隔离区做人工复核或延迟投递,不要无痕迹丢进垃圾桶。否则会丢掉偶发真线索,也看不到攻击模式如何演变。
本文术语
CRM — Customer Relationship Management — 客户关系管理
webhook — HTTP callback when an event happens — 事件发生时触发的 HTTP 回调
LLM — Large Language Model — 大语言模型
Celery — Python task queue for background jobs — Python 后台任务队列
RAG — Retrieval-Augmented Generation — 检索增强生成
DDoS — Distributed Denial of Service — 分布式拒绝服务攻击