电商课题:对付秒杀器等恶意访问行为的简单梳理
201208 @郑昀
-秒杀器爱好者的技能点-
- OCR识别
- 掌握一般的验证码图片识别OCR技术,多数局限于英文和数字字符的OCR识别,随着背景干扰加大,识别率急剧降低
- 表单提交
- 提前准备好表单
- 自动填写表单,自动提交
- 自定义快捷键
- 题库
- 针对特定电商,提前收集秒杀问题的题库
- 录制回放
- 利用“按键精灵”软件录制鼠标键盘动作并进行回放
- 变换IP
- 每走完一遍流程,更换一下出口IP(重新ADSL拨号或更换代理IP地址与端口)
- 早期的cookie欺骗
- 早期有人把cookies校验放在浏览器端做,自然可以欺骗
- 提前获得验证码
- 拍拍至今所使用的图片验证码都是 http://captcha.qq.com/getimage 提供的,可以与业务无关;它设置了一个会话级cookie,所以可以提前手动刷新拿到若干个verifycode和verifysession组合
- 强制使用过期cookie!
- 此办法可结合上一条
- 一般是浏览器提交cookie里的verifysession(或一个Hash串)和手工输入的验证码字符串,服务器端按F(verifysession)==verifycode进行校验。那么秒杀器突破时,强制扔掉服务器之前给的Hash串,用自己手中掌握的 verifysession和 verifycode提交,这样就可以无视了。即使一组 verifysession和 verifycode在服务器端验证后立即失效,也无所谓,已经突破了,就拼谁的秒杀器并发提交快即可
- 强制使用过期题目
- 如果本次秒杀商品对应的答题不是一对一锁定的(换其他题提交无效),那么也可以采用上一条的做法,强制使用过期题目
郑昀 :△
==京东商城的做法==
2010年的京东做法:
曾推出紧急公告:
『京东将根据服务器日志判断抢购者是否使用了“秒杀器”,京东有权取消该订单,然后剩余产品重新抢购我们会紧急开发一套临时防火墙,由系统自动屏蔽“秒杀器”并且自动封掉相关账号,取消其1元抢购权。』
郑昀 :△
==苏宁易购的做法==
2010年的易购做法:
❶ 系统会确认账户是否有秒杀资格:页面会提示“恭喜您获得秒杀资格,待系统验证您的账户为有效账户,秒杀榜即会显示“验证成功”,您即可以秒杀价购买商品,请关注您的账户验证状态!”,应该是在服务器端验证账户是否是有效账户的,而不是浏览器端;
验证本次表单填写的手机号码的有效性验证账户的有效性
❷ 问题回答模式(注意是一个秒杀就会出多道题目,全部回答正确才能参与秒杀):有考古诗的,有填字游戏,有算术题,譬如“《三国演义》中周瑜是被谁气死的?”;
❸ 根据算法生成表单中hidden input控件的name:据太平讲,每次会变化控件name或id,增加秒杀器自动组装表单的难度,但防不了录制回放;
2011年的易购做法:
❶ 单个ip在单位时间内的表单提交数做了限制;
郑昀 :△
==建东的做法==
在应用服务器上
❶ 基于IP的简单判断:连续1分钟之内超过5次做同一件事情(一般是注册、登录、下单、付款),即在应用层处理该IP。这个数据放在jvm中即可,只保存很少的数据量,不积累,不解决那种1小时多少次重复一件事情的场景;
❷ 1小时重复一件事情的场景,交给风险控制系统进行智能分析,然后把IP加入黑名单,在应有层直接干掉;
❸ 建立黑名单账户,通过分析发现有问题的账户,直接冻结掉;
❹ 在应用上采用token、图片等方式,减少‘系统’处理的可能,例如:降低‘系统自动登录’的可能。为了提高体验:第一次不出现图片验证码,第二次之后才出现;在cookie中写入一个标记,如果用户更换了浏览器,也认为是第二次,出现图片验证码提示;
郑昀 :△
==特定商品秒杀的做法==
一个登录用户(以UserID标识)和一个秒杀商品(以GoodsID标识)对应于一个Key,给用户的图片验证码与此Key绑定,且商品开卖之前访问此验证码无效。
即图片验证码与业务、与用户、与时间有关,提前拿到其他业务的验证码无效。
图片验证码一旦验证,立即失效。
相关报道:
赠图一枚: