防止接口被人盗刷的一些感想
之前做的一个活动由于没做好并发和接口限制被人大量恶意请求,现在分享一些防止盗刷的经验
转载一篇CDSN的博客思路,有不错的借鉴思路,出处:https://blog.csdn.net/qq_29842085/article/details/79639351:
1 / 验证码(最简单有效的防护),采用点触验证,滑动验证或第三方验证码服务,普通验证码很容易被破解
2 / 频率,限制同设备,同IP等发送次数,单点时间范围可请求时长
3 / 归属地,检测IP所在地是否与手机号归属地匹配;IP所在地是否是为常在地
4 / 可疑用户,对于可疑用户要求其主动发短信(或其他主动行为)来验证身份
5 / 黑名单,对于黑名单用户,限制其操作,API接口直接返回success,1可以避免浪费资源,2混淆黑户判断
6 / 签名,API接口启用签名策略,签名可以保障请求URL的完整安全,签名匹配再继续下一步操作
7 / token,对于重要的API接口,生成token值,做验证
8 / https,启用https,https 需要秘钥交换,可以在一定程度上鉴别是否伪造IP
9 / 代码混淆,发布前端代码混淆过的包
10 / 风控,大量肉鸡来袭时只能受着,同样攻击者也会暴露意图,分析意图提取算法,分析判断是否为恶意 如果是则断掉;异常账号及时锁定;或从产品角度做出调整,及时止损。
11 / 数据安全,数据安全方面做策略,攻击者得不到有效数据,提高攻击者成本
12 / 恶意IP库,https://threatbook.cn/,过滤恶意IP
tips:
鉴别IP真伪(自己识别代理IP和机房IP成本略高,可以考虑第三方saas服务。由肉鸡发起的请求没辙,只能想其他方法)
手机号真伪(做空号检测,同样丢给供应商来处理,达不到100%准确率,效率感人,并且不是实时的,可以考虑选择有防攻击的运营商)
安全问题是长期的和攻击者斗智斗勇的问题,没有一劳永逸的解决方案,不断交锋,不断成长
接下来写一部分自己的实战感悟:
- 1、验证码是必须的,但是局限性很大。很多盗刷工具就直接通过工具批量获取验证码再输入到脚本中直接通过校验,这个只能稍微做一下拦截。
- 2、redis建立一个db0库专门用来存储ip访问次数和频率,把频率过高的ip拉黑。这个方式也有局限性,就是ip可以混淆,也是只能拦截一部分恶意请求。
- 3、前端代码混淆。建议做,成本低有效果。
- 4、带上简单token验证,能拦截一部分,token有效期可以设置短一点。
- 5、前后端签名校验。重要接口必须加上。
- 6、传参的时候记得不要直接把重要信息交给前端传,尽量后台做。
- 7、手机号黑名单。这个有供应商提供,不过收费标准有些是按条来的,项目数据量大而且预算有限的情况下不建议使用。