估计很多公司都遇到过接口被刷的窘境,说实话,第一次遇到这种事儿的时候突然之间还真不知道该怎么办了。目前就回顾下事件发展的全过程:
从发现接口被攻击到使用短期方案解决问题,基本上用了17个小时的时间。在这个过程用,常规的解决方案如封锁IP基本上没用,所以不得已的情况下采用了禁用接口的方案。但这个方案不伤敌还自损1000,充其量也就是期盼攻击方能放过我们,但次日凌晨开启接口后这脸被打得啪啪的。
最后请教了牛人,才知道了有通过特征值过滤解决接口被刷的这么一种短期方案,步骤如下:
- 分析攻击请求
各公司应该都能知道攻击我们的请求是什么,把它们的特征值都罗列出来,进行对比 - 找到攻击请求中独立于其他请求特征值(要注意尽量防止误伤)
比如这次攻击我们接口的请求有个特征就是之前请求中没有的 - UserAgent = ’Mozilla/5.0 (XXXX)‘ - 拦截具有这些特征值的请求
由运维部门在Nginx中拦截这些请求
效果:
虽然当时立竿见影的解决了攻击问题,但其实这个只是短期方案而已。长期还是需要针对不同的服务提升我们的校验复杂度(如验证码加入图片验证码等),才能从根本上解决问题。