✅防止接口被恶意刷流量,除了限流还应在代码层面做哪些防护?
典型回答
接口恶意被刷的话,我们需要通过技术手段来识别出来哪些流量是恶意流程,区别于正常流量,恶意流量一般他的请求都是自己伪造的一些异常参数或者非法参数。还有就是恶意流量大部分都是机刷的,所以要想办法识别出非人为的流量。
第一部分,针对异常参数和非法参数的防控是很重要的,我们的接口需要有非常强的参数校验和过滤能力,主要需要从这几个方面来考虑:
1、验证码,这个大家都很好理解,对于一些流量来源是用户操作界面的接口,可以要求用户输入验证码,或者是做一些行为验证码,比如那种滑动拼图的,这样就可以提升一部分的接口安全性。
2、token,和验证码类似,就是一些关键的接口,需要用户提交合法的token,所谓token其实就是个口令,是一个我们提前发放给用户的合法的参数,只有带来token的,我们才认为他是合法用户。token也有很多种,比如用户登录后的token,或者是用户访问页面的时候请求后端拿到的token等等的。并且针对token我们可以做定期的刷新,以及限流。
3、验签,这个一般是对外提供的接口是需要的,这个不详细说了,可以看下面这个文章:
4、参数合法性校验,针对一些特殊的参数,需要多做一点边界值、特殊值的校验,比如手机号要求11位,邮箱做正则匹配,list限定一下最大的数量等等的。我们之前就出现过,内部的安全扫描扫到我们一个贷款分期试算的接口,他传了一个巨大的数字,但是后端没做校验,就开始进行分期计划的试算了,因为实在是太多了,就直接把内存干爆了。所以,入参中多加点限制,@NotNull 、 @Min @Max多用用。
5、行为逻辑关联性校验。比如组合下单前, 比如是有添加购物车行为的,不能绕过加购来做组合下单、
另外,就是识别出一些机刷的流量,这部分其实是非常专业的风控领域了,一般有专门的风控来做,我们也可以了解一些。
1、集成人机识别服务,通过 TLS 指纹、IP 信誉库、鼠标轨迹分析等区分真人用户与机器人。
2、把用户的请求生成唯一设备指纹(通过 User-Agent、屏幕分辨率、Canvas 指纹等),识别并限制同一设备的异常高频请求。
3、统计用户请求的时间间隔分布,正常用户操作存在随机性,而脚本请求往往呈现固定频率。
4、检测请求IP的地理位置(如境外代理IP)、ASN(自治系统号),结合历史数据标记可疑来源。
5、….还有很多很多,借助算法能力可以挖掘出很多异常行为。