显然,第二个验证码直接覆盖掉第一个会更加安全,也就是至始至终都只有一个处于有效状态的验证码,但这会不会给用户带来困惑?毕竟偶尔还是有手机信号不好,等了1分钟多钟之后才收到第一个验证码的情况。
如果不替换而是追加验证码呢?最极端的情况是会出现一个手机号有5个有效验证码的情况,会增加黑客暴力破解的成功概率。不过因为一个验证码最多只能被使用3次,之后就被作废了,所以实际上黑客暴力破解的难度依然很高。
总的来说,直接覆盖的做法用户体验不佳但更安全,依然有效的做法用户体验更好但相对而言安全性略有降低。”
经过反复思考后,老罗最终选择保留验证码5分钟有效期的设置。
Part 2:防不胜防短信验证码登录的功能上线后,运行状态一直比较平稳,然而这种平静的氛围被一通电话打破了。
“喂,对,是我”,老罗桌上的电话响了,他忙着写代码,歪着脖子用肩膀和脸夹住话筒说道:“是客服部啊,有什么事我可以帮忙的?”
“是这样,我们今天突然收到很多顾客打来的电话,抱怨说收不到短信验证码,登录不了账户,他们基本都是新用户,只有用手机注册的账号,没有用户名密码,所以也不能用原先的用户名密码去登录账号。我们只好让顾客再等会儿试试,可能是信号不好,但后来他们反馈说还是收不到我们的短信,而且只是收不到我们的短信,所以,你们那边能帮忙看看是怎么回事吗?”电话那边一口气讲了一堆话。
“还有这种事,行,我知道了,我们马上调查分析一下。”老罗刚挂断电话,运维部的同事过来找到老罗,说短信配额今天消耗得很厉害,已经触发了2次告警了,运维同事做了一下简单的分析,发现早上10点和下午2点左右有两批次大量发送登录短信验证码的请求,但又没有观察到对应的后续登录请求,判断可能是被黑客攻击了,于是临时性的屏蔽了攻击来源IP地址的访问。
“来找你就是想和开发团队共同调查下这个问题,看接下来怎么处理会比较好。”运维部的同事说道。
老罗觉得这个事和刚刚接到的客服部门说的是同一件事,便把刚才电话里听到的信息和运维同事讲了一遍。
“这更能证实是黑客攻击了,而且看来他们的目标应该不是暴力登录,而是故意消耗短信发送配额,一旦配额被用完,用户就无法正常登录,也算是某种程度上的拒绝式服务攻击了。” 运维部的同事说完看向老罗。
老罗若有所思的说道:“没想到他们还能这么玩儿。我们目前只限制了一个手机号60秒内发一次验证码,却没有应对大量不同手机号的情况。”
“那现在怎么处理比较好呢?虽然临时禁用了攻击者的IP,但我们担心会误伤真实用户,而且黑客也可能会变换IP来继续进行攻击。”运维同事继续问道。
“有办法,在发短信验证码之前先要求输入图形验证码。”
“嗯,有道理,你们什么时候能做好上线?”
“我现在就加”,老罗还没说完就已经开始写代码了:“一会儿弄完紧急上线。”
“行,我回去安排一下,咱们运维部全力配合。”
“看来之前那张故事卡里的安全验收标准还差了一条”,老罗自然自语道:“如果加上一条图形验证码的要求恐怕就不会出这个事儿了。”
发送短信验证码之前,先验证图形验证码是否正确
Part 3:权衡“喂喂喂,这搞的什么鬼?”用户体验设计师Jenny抓住路过的老罗说:“我不过就是休了两天假,回来之后怎么发现登录这里多了个图形验证码出来?”
老罗向Jenny解释了这个图形验证码的由来,是出于安全的考虑才增加的。
“我知道安全很重要,可是这图形验证码太伤害用户体验了,现在顾客登录过程中就要再多做一次输入,如果填错了还得重新再来一次,而且这图形验证码的风格和我们的App风格明显不匹配,另外,这图形验证码是不是也太扭曲了,我都看错好几回了……。”Jenny显然并不认同这个方案。
“风格我们可以修改,这不是还有你嘛。”老罗为难的说到:“难度高是因为现在的图像识别技术突飞猛进,简单图片验证码很容易被破解。”
“莫非就没有别的解决办法了吗?”Jenny继续问道。