想不到五年前写的代码,五年后被人拿出来说事了,起因是五年前我给当时的公司软件登录加了一个登录手机验证的功能,就是现在很普遍的登录账户时向手机发!送一个验证码,然后验证码填写正确后就可以登录的这种功能。验证码我发的是四位,结果上家公司的副总发消息给我,说他听现在负责这个模块的程序员说四位验证码不安全,要至少6位数,我听完都笑了!
我在这家公司上班的时候,软件已经迭代了至少十年了,这十年间登录从来都不用验证码,因为软件大部分都是独立部署的,而且是功能性软件,被攻击的可能性很小,但是话说回来,软件如果真的被攻击了,就凭当时整个公司所有程序员平均薪资不超过15K的这种状况来看,被攻击那就只能干看着了!
我们当时之所以要加验证码,那是因为软件接入了一个第三方平台,第三方平台做审核时必须要求有一定的安全规则,其中,登录需要手机验证这个功能,也是那个第三方平台审核软件时审出来并且要求加的。
因此,公司把登录需要手机验证码这个事情交给了我去做,我也不知道为啥当时我用了四位验证码,但是,就是用了四位验证码,也没觉得有多么不安全。
按照现在这个公司的程序员的说法,因为我四位验证码是纯数字,因此,最大组合就是只有9999种,而六位验证码则组合有999999,安全性大100倍!
我听完都笑了,要知道,我虽然只做了四位验证码,但是验证码是有时效性的,10分钟内有效,且连续输错三次锁定,需要重新发送验证码。
在这种措施下正常的暴力破解基本无效,除非碰巧,那么理论上碰巧输对的概率是不是3333之1?有这运气,你还不如去买彩票呢!
那个程序员就和我杠,说万一就碰巧了呢?
我说这种可能性几乎不存在,因为他还要满足一定的条件!
首先,我软件登录虽然需要手机验证,但是还是需要输入密码的,也就是说,想要冒用其他人身份登录软件,你首先得知道软件密码,其次验证码的有效期是10分钟,用完即销毁,连续输错三次也会销毁,那么如果我需要“碰撞”验证码,就得知道账号的实际使用者已经向系统申请了手机号验证,并且系统已经向该手机发送了验证码,并且,抢在账号实际使用者登录前登录成功。
但是,别忘了,即使他知道了账号的实际使用者已经向系统申请了验证码,但是,软件还有个限制,那就是账号的冒用者和实际使用者分别用的是两台电脑,可是,登录账号可以输手机验证码的前提是他点击了“发送验证码”这个按钮才行,不点这个按钮甚至连填写验证码的资格都没有!
那有没有可能账号的冒用者直接点击发送验证码,然后开始“碰撞”密码呢?这种可能性也不是没有。
但是,前面也说了,验证码连续输入错误三次,会被限制登录,他即使是“碰撞”,也需要等限制登录时间结束才可以再次“碰撞”。
这种情况下,号主面对不停发来的短信,他难道没有意识到自己的号正在被人尝试登录吗?当号主知道这个事情以后,密码一改,对面冒用者此时连密码这关都过不了了!
当然,如果号主的电脑被劫持了,冒用者通过操作号主的电脑去干一些什么事情,那我就真没办法了!但是,号主能做的,就是关闭电脑,然后使用另一台电脑去更改账户登录信息。
并且,我们软件后台还可以直接屏蔽IP,多种防护措施下,我想问,六位验证码比四位验证码强到哪里去?
当然,我不可否认的是,至少从账面上看,“碰撞”六位数的确要比“碰撞”四位数要难100倍!那也仅仅只是账面上而已。
实际情况中,如果不是软件后台被攻克、使用者电脑被劫持、软件总控制中心被劫持、手机被盗等等让号主无法及时作出处理的事情,软件密码加上手机验证码基本上是无懈可击的!
但是,我还是坚持开始的那种观点,但凡账号冒用者使用一些技术手段能够绕过软件后台的一系列防护措施,以我上家公司的技术,根本是应对不了的!而且,账号冒用者如果真有这个技术,他还要去使用“碰撞密码”这种原始的盗号手段吗?
所以,你作为一个程序员,只看到了四位数验证码比六位数验证码被“碰撞”成功的概率大了100倍,没看到我系统里面做了什么限制,上来就说不安全,我觉得这不是程序员说出来的话!
结语
如果是现在让我做这个功能,我估计也会使用六位数验证码,那也仅仅是六位数验证码相对来说用得多而已,没有别的想法!
与其担心四位数手机验证码被“碰撞”,倒不如花点时间提升一下自己对于计算机安全防护这方面的知识,让“碰撞”者连输入验证码的机会都没有!
热门跟贴