Skip to content

如果线上接口被恶意刷流量了,要如何解决? ​

  • 标签:后端、场景题

🏛 业务架构师 ​

接口被恶意刷流量,我按识别 → 拦截 → 兜底 → 根治四步答,重点讲"分级对抗"——刷和防是成本博弈,目标是让攻击成本高于攻击收益,同时不误伤真实用户。

第一步:快速识别(搞清楚谁在刷)

  • 流量画像:单一 IP / 段、异常 UA、无 Referer、请求频率远超人类(每秒几十次)、行为路径机械(无首页直接打接口)
  • 对照业务指标:转化率为零的高流量 = 刷子(真实用户会浏览,刷子只打目标接口)

第二步:分层拦截(由轻到重)

  1. 限流:IP/用户/设备维度令牌桶,超频返回 429
  2. 人机校验:触发阈值的请求弹出滑块/验证码——分级挑战:可疑才弹,别全量弹(弹一次验证码,真实转化掉一截)
  3. 黑名单:确认恶意的 IP 段、设备指纹、账号进黑名单,实时生效
  4. WAF 规则:特征规则拦截(签名错误、参数畸形)
  5. 网关层熔断:单接口异常流量过大时直接按比例丢弃,保护后端

第三步:业务兜底(技术拦不住的部分)

  • 预算封顶:被刷的业务(领券、抽奖、短信)设总预算熔断线,刷穿上限自动关闭活动——这是最后的资损闸门,必须有
  • 结果异步复核:中奖/领券结果先冻结,风控事后核验再发放

第四步:根治与反制

  • 接口加签名 + 时间戳 + nonce(抬高伪造成本)
  • 设备指纹体系建设:刷子换 IP 容易,换设备难
  • 数据回溯:把刷量特征喂给风控模型,形成对抗升级的正循环

架构师收尾:防护要算账——每层防护都有成本(验证码伤体验、误封伤渠道),按业务资损面配置防护等级:营销接口全副武装,查询接口限流即可。永远给业务留一个"一键关闭活动"的开关,技术防线被突破时它就是止损线。

🏗 系统架构师 ​

恶意刷接口是攻防综合题,我按识别 → 拦截 – 提高成本三层纵深防御讲,单点手段都会被绕过。

第一层:识别(先知道谁在刷)

  • 流量画像:QPS 突增基线告警;按 IP/UA/设备指纹/用户维度统计频次与行为特征
  • 指纹类特征:单一 UA、无 Referer、请求间隔方差极小(脚本规律)、注册/登录/下单行为链缺失(直接调接口)、IP 是数据中心网段(AWS/阿里云 IP 库比对)
  • 设备指纹:采集浏览器 canvas/WebGL 指纹、App 端设备 ID 完整性校验(root/模拟器/群控识别)

第二层:拦截(网关与业务双重卡口)

  1. 网关层:IP 与用户双维度限流(令牌桶),敏感接口独立限流阈值;黑名单库(IP/设备/账号)秒级下发
  2. 人机校验:高频触发滑动验证码/行为验证(见验证码专题),增加机器成本
  3. 业务层校验:关键动作要求 token/签名(防重放:timestamp + nonce + 签名,nonce 存 Redis 防重放)、风控规则(新注册账号 1 分钟内请求 100 次 → 冻结)
  4. 蜜罐字段:表单里藏隐藏字段,正常用户不填,脚本填了就是机器人

第三层:提高攻击成本(架构视角)

  • 接口动静分离:刷子关心的数据(库存、资格)做成"延迟+模糊"展示,实时精确数据要登录+风控通过
  • 账号成本:注册环节手机号实名校验、设备与账号绑定限购
  • 资源成本:未登录接口限流更严、响应加随机延迟,让脚本低效

闭环:所有拦截数据回流风控平台,模型迭代识别规则,形成"识别-拦截-回流-升级"闭环。

💻 全栈开发专家 ​

恶意刷接口我做分层防御,单一手段都会被绕过。

第一层:网关限流(量级压制)

nginx
# Nginx / 网关维度:IP + URI
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

分布式网关用 Redis + Lua 令牌桶,维度组合:IP、UID、设备 ID、URI。注意家宽 NAT 后大量正常用户共享出口 IP,纯 IP 限流误伤,要组合 User 维度并放宽 IP。

第二层:身份与门槛(提高成本)

  • 行为验证码前置:滑动/点选,人机识别不过不放行(详见验证码方案)。
  • 接口必须登录态 + 接口签名(appKey + HMAC + timestamp + nonce),脚本伪造请求成本大增。
  • 敏感操作(发码、抽奖)加设备指纹,同设备多账号直接风控。

第三层:风控规则(识别恶意)

  • 频次画像:单用户/单设备单位时间操作次数超 P99 直接拦截。
  • 黑名单库:恶意 IP 段、设备 ID 黑名单,风控后台可一键拉黑。
  • 行为特征:注册时间极短即高频操作、UA 固定不变、无鼠标轨迹的纯 API 流。

第四层:架构冗余

  • 业务隔离:抽奖/发放类接口单独限流池 + 熔断,防打穿主交易。
  • 静态化/缓存:能缓存的绝不过动态逻辑。
  • 告警:接口调用量同比环比突变自动告警,早发现早止损。

实话:安全是成本对抗,目标不是绝对防住,而是让攻击成本远高于收益。