如果线上接口被恶意刷流量了,要如何解决?
- 标签:后端、场景题
🏛 业务架构师
接口被恶意刷流量,我按识别 → 拦截 → 兜底 → 根治四步答,重点讲"分级对抗"——刷和防是成本博弈,目标是让攻击成本高于攻击收益,同时不误伤真实用户。
第一步:快速识别(搞清楚谁在刷)
- 流量画像:单一 IP / 段、异常 UA、无 Referer、请求频率远超人类(每秒几十次)、行为路径机械(无首页直接打接口)
- 对照业务指标:转化率为零的高流量 = 刷子(真实用户会浏览,刷子只打目标接口)
第二步:分层拦截(由轻到重)
- 限流:IP/用户/设备维度令牌桶,超频返回 429
- 人机校验:触发阈值的请求弹出滑块/验证码——分级挑战:可疑才弹,别全量弹(弹一次验证码,真实转化掉一截)
- 黑名单:确认恶意的 IP 段、设备指纹、账号进黑名单,实时生效
- WAF 规则:特征规则拦截(签名错误、参数畸形)
- 网关层熔断:单接口异常流量过大时直接按比例丢弃,保护后端
第三步:业务兜底(技术拦不住的部分)
- 预算封顶:被刷的业务(领券、抽奖、短信)设总预算熔断线,刷穿上限自动关闭活动——这是最后的资损闸门,必须有
- 结果异步复核:中奖/领券结果先冻结,风控事后核验再发放
第四步:根治与反制
- 接口加签名 + 时间戳 + nonce(抬高伪造成本)
- 设备指纹体系建设:刷子换 IP 容易,换设备难
- 数据回溯:把刷量特征喂给风控模型,形成对抗升级的正循环
架构师收尾:防护要算账——每层防护都有成本(验证码伤体验、误封伤渠道),按业务资损面配置防护等级:营销接口全副武装,查询接口限流即可。永远给业务留一个"一键关闭活动"的开关,技术防线被突破时它就是止损线。
🏗 系统架构师
恶意刷接口是攻防综合题,我按识别 → 拦截 – 提高成本三层纵深防御讲,单点手段都会被绕过。
第一层:识别(先知道谁在刷)
- 流量画像:QPS 突增基线告警;按 IP/UA/设备指纹/用户维度统计频次与行为特征
- 指纹类特征:单一 UA、无 Referer、请求间隔方差极小(脚本规律)、注册/登录/下单行为链缺失(直接调接口)、IP 是数据中心网段(AWS/阿里云 IP 库比对)
- 设备指纹:采集浏览器 canvas/WebGL 指纹、App 端设备 ID 完整性校验(root/模拟器/群控识别)
第二层:拦截(网关与业务双重卡口)
- 网关层:IP 与用户双维度限流(令牌桶),敏感接口独立限流阈值;黑名单库(IP/设备/账号)秒级下发
- 人机校验:高频触发滑动验证码/行为验证(见验证码专题),增加机器成本
- 业务层校验:关键动作要求 token/签名(防重放:timestamp + nonce + 签名,nonce 存 Redis 防重放)、风控规则(新注册账号 1 分钟内请求 100 次 → 冻结)
- 蜜罐字段:表单里藏隐藏字段,正常用户不填,脚本填了就是机器人
第三层:提高攻击成本(架构视角)
- 接口动静分离:刷子关心的数据(库存、资格)做成"延迟+模糊"展示,实时精确数据要登录+风控通过
- 账号成本:注册环节手机号实名校验、设备与账号绑定限购
- 资源成本:未登录接口限流更严、响应加随机延迟,让脚本低效
闭环:所有拦截数据回流风控平台,模型迭代识别规则,形成"识别-拦截-回流-升级"闭环。
💻 全栈开发专家
恶意刷接口我做分层防御,单一手段都会被绕过。
第一层:网关限流(量级压制)
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 流。
第四层:架构冗余
- 业务隔离:抽奖/发放类接口单独限流池 + 熔断,防打穿主交易。
- 静态化/缓存:能缓存的绝不过动态逻辑。
- 告警:接口调用量同比环比突变自动告警,早发现早止损。
实话:安全是成本对抗,目标不是绝对防住,而是让攻击成本远高于收益。