TOC

API 防刷

知乎看到一个问题:美团面试:接口被恶意狂刷,怎么办?,这里做一个总结。

主要影响

  1. 降低系统可用性
  2. 数据被偷

识别异常

首先识别异常,最简单的就是 IP 访问频率,账号访问频率。
对异常的请求在入口地址,访问来源上做一个合理的归类,然后达到阈值就理解告警处理。

处理异常

  1. 频繁访问就需要输入验证码
    非常常规的手段,应该可以拦截大部分的异常访问
    也要小心使用,尽可能不要影响正常访问

  2. 封异常的账号或 IP
    封 IP 容易误伤,要慎重
    识别异常:Session 或者 JWT 中包含客户端信息,如果发现客户端信息不匹配,直接拒绝访问,原来的那个会话也可以标记一个可疑

  3. API 中加入秘密逻辑,比如平平无奇的一个签名
    利用其他参数 + 时间戳生成一个签名,除非花不少精力来进行逆向工程
    如果客户端可控可行,开放的 API 就不适合了

  4. 可以考虑在客户端实现异常标记之后的处理逻辑,从简单的 API 访问控制,升级到复杂的,严格的访问控制

知乎上看到的其他想法:

  1. PoW,利用难以计算却容易验证的算法,强行增加客户端的算力成本
    对于正常客户访问影响微乎其微,但是对于恶意攻击的人来说,就比较头疼了
  2. 和上面第三点类似,时间戳参数中偷偷加入一个校验逻辑,难以发现(这个设计确实有点意思)
  3. 报警