知乎看到一个问题:美团面试:接口被恶意狂刷,怎么办?,这里做一个总结。
主要影响
- 降低系统可用性
- 数据被偷
识别异常
首先识别异常,最简单的就是 IP 访问频率,账号访问频率。
对异常的请求在入口地址,访问来源上做一个合理的归类,然后达到阈值就理解告警处理。
处理异常
-
频繁访问就需要输入验证码
非常常规的手段,应该可以拦截大部分的异常访问
也要小心使用,尽可能不要影响正常访问 -
封异常的账号或 IP
封 IP 容易误伤,要慎重
识别异常:Session 或者 JWT 中包含客户端信息,如果发现客户端信息不匹配,直接拒绝访问,原来的那个会话也可以标记一个可疑 -
API 中加入秘密逻辑,比如平平无奇的一个签名
利用其他参数 + 时间戳生成一个签名,除非花不少精力来进行逆向工程
如果客户端可控可行,开放的 API 就不适合了 -
可以考虑在客户端实现异常标记之后的处理逻辑,从简单的 API 访问控制,升级到复杂的,严格的访问控制
知乎上看到的其他想法:
- PoW,利用难以计算却容易验证的算法,强行增加客户端的算力成本
对于正常客户访问影响微乎其微,但是对于恶意攻击的人来说,就比较头疼了 - 和上面第三点类似,时间戳参数中偷偷加入一个校验逻辑,难以发现(这个设计确实有点意思)
- 报警