本文目录导读:

API接口防刷是一个常见且重要的安全课题,核心思路是增加攻击者的成本,同时尽可能降低对正常用户的干扰。
以下是业界主流且经过实践检验的防刷策略,从易到难、从基础到高级,你可以根据业务场景组合使用:
第一层:基础防御(门槛低,效果有限,但必须做)
这些是最基本的防护,能挡住大量“毫无技术含量”的脚本和爬虫。
-
请求频率限制(Rate Limiting)
- 原理:限制同一IP、同一用户或同一API Key在单位时间内的请求次数。
- 实现:在Nginx、API网关或应用层实现,常用算法:令牌桶、漏桶、滑动窗口。
- 示例:对未登录用户,限制每个IP每分钟请求100次;对登录用户,限制每分钟1000次。
-
User-Agent + Referer 校验
- 原理:检查HTTP头中的
User-Agent是否为常见浏览器/工具,Referer是否为合法的来源域名。 - 局限:极易伪造,只能防“最懒”的攻击者。
- 原理:检查HTTP头中的
-
强制登录/API Key
- 原理:只有认证用户才能调用敏感接口,这能将匿名攻击变为需要注册账号的攻击,增加了成本。
- 改进:结合手机号/邮箱验证码注册,提高水军注册门槛。
第二层:中级防御(需要前后端配合,效果显著)
这些是大多数互联网产品的标准配置。
-
验证码(CAPTCHA)
- 原理:在请求触发特定频率阈值或高危操作(如登录、下单)时,强制弹出图形验证码、滑块验证码或行为验证码。
- 服务:Google reCAPTCHA (v3 无感)、极验、腾讯防水墙等。
- 策略:不要每次都出,而是在可疑行为出现后再弹出,用户体验更好,连续输错3次密码后弹出。
-
签名机制
- 原理:客户端使用约定的算法(如 HMAC-SHA256),将请求参数(如时间戳、随机数、请求体)组合生成一个签名
sign放在请求头中,服务端用相同算法校验。 - 关键点:
- 时间戳:防止重放攻击(只接受5秒内的请求)。
- 随机数/Nonce:防止同一签名在短时间内被重复使用(服务端需要缓存已用的Nonce)。
- 效果:攻击者不知道签名密钥,就无法构造有效请求。
- 原理:客户端使用约定的算法(如 HMAC-SHA256),将请求参数(如时间戳、随机数、请求体)组合生成一个签名
-
IP 黑/白名单
- 原理:对短时间内请求失败率极高(如500错误、401错误)或频率远超阈值的IP,自动加入黑名单,对可信的API调用方(如内部服务、合作伙伴服务器)加入白名单。
第三层:高级防御(基于大数据和行为分析,成本较高)
适用于核心业务、高价值场景。
-
设备指纹
- 原理:通过JavaScript采集客户端的环境信息(屏幕分辨率、GPU型号、浏览器插件、时区、字体列表等),生成一个唯一的
设备ID。 - 作用:可以识别出“一个IP背后有100个不同的虚拟设备”这种异常情况,或者“一个设备ID短时间内切换了多个账号”的刷子行为。
- 原理:通过JavaScript采集客户端的环境信息(屏幕分辨率、GPU型号、浏览器插件、时区、字体列表等),生成一个唯一的
-
人机行为分析
- 原理:分析用户的操作轨迹。
- 鼠标轨迹:真人操作通常有自然的抖动和停顿,而机器人的移动轨迹是完美的直线或角点。
- 点击间隔:真人点击间隔是随机的,机器人则非常均匀。
- 页面停留时间:真人需要阅读时间,机器人可能瞬间提交。
- 服务商:阿里云验证码、腾讯滑块、顶象等。
- 原理:分析用户的操作轨迹。
-
业务层逻辑风控
- 原理:结合业务数据做AI判断,这是最强、也是最复杂的防御。
- 示例:
- 营销活动(领优惠券):同一收货地址、同一手机号、同一支付账号短时间内下了10单,判定为“羊毛党”。
- 评论系统:一个IP发表大量内容相同、时间间隔极短的评论。
- 投票系统:所有票都在深夜0点-5点之间投出,且来源IP段高度集中。
第四层:终极防御(非技术手段)
-
法律与合同约束
在API文档中明确声明禁止滥用,对合作方,通过合同约定调用上限和惩罚措施。
-
人机验证升级
当AI攻破简单验证码后,可以用更复杂的交互,如文字点选、空间推理等。
实战策略组合建议
不要只用单一方法,应该分层部署:
- 防护1(网关层,无感):做全局的IP频率限制 + 黑白名单。
- 防护2(应用层,低感):对高频IP或用户,弹出滑块验证码。
- 防护3(核心逻辑层):对订单、支付、优惠券等核心接口,强制使用签名机制 + 设备指纹 + 业务风控。
- 防护4(兜底):建立监控告警,当API响应时间、错误率、特定接口调用量突然飙升时,立刻告警并自动触发限流/熔断。
总结一句话: 最理想的防刷是让机器觉得“麻烦”而放弃,让用户觉得“便捷”而继续,这需要根据你的业务价值,动态地、组合地使用上述策略。