随着移动互联网的兴起,如今的App开发模式都是APP + api模式,如图
api
由于app和api需要通过网络通信,api一般都是直接 对外的,所以api的访问安全就很重要了,api没有任何限制,或只有很简单的防护措施,这是很多新手容易犯的错误,一个漏洞,就可能让你的系统崩溃,数据泄露!
所以网络安全显得越来越重要了,api安全措施有很多,常用的如https、数据加密、url数据签名等方法。api防刷也属于接口安全的范畴。
今天就api防刷进行讨论一下:
基本分两种情况
1. 恶意访问
使用工具进行不停的循环访问,占用系统资源,影响系统正常的对外服务
2. 支付接口、短信发送接口等,
这种接口直接会导致企业的损失,更要注意。
魔高一尺道高一丈,我们常用措施
1. 根据ip限制访问频率
限制访问,访问的时候记录用户IP
写到redis中,以ip为键,每次访问+1,有效期一个小时;
每访问一次就给这个IP+1,比如限制1w次,加到1W次就拒绝访问,直到记录过期,
这种方式简单粗暴,对于恶意攻击、爬虫抓取很有效果,但难免会有误伤,影响正常的访问请求。
2.验证码
一般在需要发送短信的地方,需要先输入验证码,验证码成功后才发送短信,如头条登录,先输入手机号,点发送会先跳出来下面这个东西,验证成功才进行下一步。
验证码
通过验证码,可以限制很多的非法的接口访问了。
3. 限制发送频率
以头条为例,发送验证码频率限制为1次/分钟,再次发送只能等着
频率限制
我以前做系统 ,也是对同一手机号发送有限制,同一功能的验证码限5次,所有功能限10次,这样一个手机号就刷不了很多了。
3. 后端逻辑验证
如果别人通过抓包完全看到你的请求,发送了完全相同的参数,进行重放攻击,如何防范呢?
这种可能访问被人抓了包,也可能是用户连续提交,签名和 access token这些措施是无效的。这时就需要server端进行判断了。
充值支付类的api,对订单的状态加以判断,已处理过的订单,不再重复处理。
增加时间戳,对于过期的请求不再处理。
4. 接口访问监控
一般来说,我们会有api访问监控,如果一个 ip访问频率异常,如果达到一定数量,我们可以系统报警通知管理员,将损失降到最小。
单一措施,很难完全做到接口安全,我们要综合运用多项措施,才能做到万无一失!