前言
防刷是互联网中高可用服务中需要考虑的重要一环,尤其是在有利益纠葛的,比如活动等页面,对应的后台需要根据需求有充分防刷能力。以下进行简要总结
有效方案
提高并发以弱化被刷的伤害
后端:
- 索引和表分区建立合适,选择合适的分布式存储组件
- 完善监控、限流降级功能
- 分库分表
- 热点数据缓存
- 网络层过载保护
前鍴:
-
静态化处理,尤其访问量比较大的首页,例如中心首页、活动首页等。每隔一定时间去更新静态文件(3分钟或者更长)。
-
本地缓存,前鍴的部分数据缓存,降低对后台的访问量
-
分流组件,(比如随机)一部分用户直接返回系统繁忙,必要时通过这种方法牺牲用户体验保护服务运行
主动防御:具体防止接口被狂刷
**事前:**设计考虑防刷,主动防御
主动探知黑产特征:事前阶段的主要任务就是信息收集。羊毛党为何总是能第一时间获取优惠活动或者黑产总能突然发批量对平台漏洞信息进行攻击,获取先发优势?这是因为他们往往有着专门的线报人员对各种信息关注和整理,并第一时间通过各种渠道进行传播和扩散。如果能打入内部,或者通过部分特征抓取则可以帮助防御:常见渠道有QQ群聊、公众号 /小程序、网赚站点/APP
机制考虑:充分考虑异常,丢包、乱序、并发、重启、crash等
**事中:**影响可控,可观察发现
业务策略:需要根据具体业务和需要防范的弱点曲做限制(比如涉及刷db全表的操作)
限制频率:设备、网络ip、账号、实名信息
账号信息:账号历史行为,僵尸号打标、黑产号标记,特征发现黑产
高频行为监控:对高频进行监控和限制
认证策略:登录,验证码等策略
**事后:**可追溯
日志上报:利于后续分析刷攻击问题,需要覆盖用户主要操作,这个有利于:1. 事后发现攻击被刷形式以针对该形式做防御 2. 验证和证明已经上的防刷策略的有效性和推测产生的负面效果。
用户反馈: 提供用户反馈情况,防止负面效果影响业务过大。
补偿方式:设计之初需要如果被刷导致用户核心受到影响,对应的数据补偿方式,如果出错怎么发现和补偿
原则:
不信任原则:后端不能直接信任客户端。
后端最大原则:核心逻辑,尤其是涉及福利金额的逻辑必须放在后端,不能为了防刷和性能放在客户端,否则很容易攻破。
不吃亏原则:系统不能吃亏,涉及金额和福利优先需要保证自己不能亏损。
不重复原则:用户不能低成本或无成本的反复进行高系统消耗或获利活动。