应用安全

AI 图片生成平台如何防止 API 被刷?

图片生成接口单价高、排队敏感,一个并发刷请求就足以打满 GPU 队列。本文按「成本倒推阈值」的思路,给出针对文生图接口的限流、配额与滥用识别方案。

图片生成接口和普通 API 的三个本质差异

维度 普通查询 API 图片生成 API
单位请求成本 近似零 单次推理电费 + GPU 折旧,通常是前者的几十到上千倍
扩容弹性 秒级扩容 GPU 卡有限,排队时间随并发快速上升
参数敏感度 字段合法性为主 分辨率/步数/批量数直接线性放大算力消耗

正因为供给刚性,攻击者不需要打满带宽,只要维持几十个并发的生成请求,就能让你的付费用户感知到「生成变慢」——这是一种以极低代价换来的体验打击。

三步把「刷新型刷量」掐断

第一步:给参数设硬上限。 在网关或应用层明确出图的最大分辨率、最大步数、单次批量张数,并对越界请求返回 400 而不是「尽力生成」。这一步不依赖任何安全产品,却是性价比最高的一层。

第二步:按算力维度做配额。 把不同参数组合折算成统一「算力点数」(例如 512×512 记 1 点、1024×1024 记 4 点),再对租户/凭据设置每日点数配额。Cloudflare Rate Limiting rules 支持按路径、请求头、JWT 声明甚至正文字段组合条件配置,可以把「路径 + body 里的 size 字段」作为计数键,实现按成本的粗略限流。

第三步:识别自动化来源。 图片生成平台的滥用者几乎不用浏览器,而是直接脚本调用 HTTP 接口。Cloudflare Bot Management 对这些非浏览器流量仍可基于 TLS 指纹、请求节奏规律性和缺少正常导航行为来打分;对分数可疑的请求可以下发挑战或要求通过 JS 校验后再进入排队。

治理异步任务的两个专项

轮询刷(polling abuse):任务提交后客户端高频查询状态。应给查询接口单独设更高的阈值且不带副作用缓存,或改用 Webhook/长轮询,避免状态查询本身成为放大攻击面。

僵尸任务(zombie jobs):大量提交任务后不取结果,占满队列且不释放。做法是「提交即占额度、超时未取自动回收」,并对同一凭据的未完成任务数设上限。

配额建议表

对象 建议配额 触发动作
未登录 / 试用 每日 5~20 点 超出后需完成人机校验或绑定支付方式
免费注册用户 每日 50~100 点 阶梯解锁,异常降回初值
付费个人版 按套餐点数 超配额 429 并提示升级
单凭据并发生成数 1~3(视套餐) 排队而非拒绝,避免报错风暴
单凭据未完成任�� ≤ 5 新提交被拒直到有任务完成

阈值不是安全数字,请用「单张毛利 ÷ 单次推理成本」反推允许的最大免费点数,再乘一个安全系数往下取整。

边界与不适用情况

  • 按分钟计费的自建 GPU 集群没有「请求数」概念,本文的按请求限流思路要换成队列治理和抢占式调度。
  • 开放第三方模型插件生态时,调用方可能是合法机器人,请避免过度依赖浏览器指纹,优先用 mTLS 或签名请求来辨认来源。
  • 限流返回值要给机器可读的重试信息(如 Retry-After),否则客户端会盲目重试,反而制造二次风暴。

常见问题

已经给 API 加了 QPS 限制,为什么 GPU 还是被打满? 因为 QPS 不管「每个请求多重」。攻击者会把单次请求的参数调到最大,用 1 个请求吃掉普通用户 20 次的算力。必须按算力点数或参数组合限流。

图片生成要不要上 WAF? 要,但目的不是挡盗刷——而是挡住 Web 端入口处的注入、SSRF(参考图 URL 拉取)等攻击;真正的成本防护靠配额和限流。

免费额度被薅和普通 Bot 攻击怎么区分? 看凭据维度:同一个 Key/IP/设备指纹在短时间内注册多个账号领取额度,是额度 farming;单账号持续高频调用则是凭据滥用。两者的治理点不同,前者在注册链路,后者在配额链路。

异步接口为什么比同步更容易被刷? 同步接口至少受 RT 约束,攻击者必须维持连接;异步接口提交成本极低,可以瞬间灌入成千上万个任务。因此异步必须配合「并发未完成数」上限。

← 返回文章列表

Cloudflare 官方合作伙伴

正在为海外业务做架构决策?

企业版选型、架构咨询、风险评估——把你的场景告诉我们,我们给出可落地的方案和路径。

作为 Cloudflare 合作伙伴,我们可以为你提供:

预约咨询