想不到五年前寫的代碼,五年后被人拿出來說事了,起因是五年前我給當時的公司軟件登錄加了一個登錄手機驗證的功能,就是現在很普遍的登錄賬戶時向手機發!送一個驗證碼,然后驗證碼填寫正確后就可以登錄的這種功能。驗證碼我發的是四位,結果上家公司的副總發消息給我,說他聽現在負責這個模塊的程序員說四位驗證碼不安全,要至少6位數,我聽完都笑了!
![]()
我在這家公司上班的時候,軟件已經迭代了至少十年了,這十年間登錄從來都不用驗證碼,因為軟件大部分都是獨立部署的,而且是功能性軟件,被攻擊的可能性很小,但是話說回來,軟件如果真的被攻擊了,就憑當時整個公司所有程序員平均薪資不超過15K的這種狀況來看,被攻擊那就只能干看著了!
我們當時之所以要加驗證碼,那是因為軟件接入了一個第三方平臺,第三方平臺做審核時必須要求有一定的安全規則,其中,登錄需要手機驗證這個功能,也是那個第三方平臺審核軟件時審出來并且要求加的。
因此,公司把登錄需要手機驗證碼這個事情交給了我去做,我也不知道為啥當時我用了四位驗證碼,但是,就是用了四位驗證碼,也沒覺得有多么不安全。
按照現在這個公司的程序員的說法,因為我四位驗證碼是純數字,因此,最大組合就是只有9999種,而六位驗證碼則組合有999999,安全性大100倍!
我聽完都笑了,要知道,我雖然只做了四位驗證碼,但是驗證碼是有時效性的,10分鐘內有效,且連續輸錯三次鎖定,需要重新發送驗證碼。
在這種措施下正常的暴力破解基本無效,除非碰巧,那么理論上碰巧輸對的概率是不是3333之1?有這運氣,你還不如去買彩票呢!
那個程序員就和我杠,說萬一就碰巧了呢?
我說這種可能性幾乎不存在,因為他還要滿足一定的條件!
首先,我軟件登錄雖然需要手機驗證,但是還是需要輸入密碼的,也就是說,想要冒用其他人身份登錄軟件,你首先得知道軟件密碼,其次驗證碼的有效期是10分鐘,用完即銷毀,連續輸錯三次也會銷毀,那么如果我需要“碰撞”驗證碼,就得知道賬號的實際使用者已經向系統申請了手機號驗證,并且系統已經向該手機發送了驗證碼,并且,搶在賬號實際使用者登錄前登錄成功。
但是,別忘了,即使他知道了賬號的實際使用者已經向系統申請了驗證碼,但是,軟件還有個限制,那就是賬號的冒用者和實際使用者分別用的是兩臺電腦,可是,登錄賬號可以輸手機驗證碼的前提是他點擊了“發送驗證碼”這個按鈕才行,不點這個按鈕甚至連填寫驗證碼的資格都沒有!
那有沒有可能賬號的冒用者直接點擊發送驗證碼,然后開始“碰撞”密碼呢?這種可能性也不是沒有。
但是,前面也說了,驗證碼連續輸入錯誤三次,會被限制登錄,他即使是“碰撞”,也需要等限制登錄時間結束才可以再次“碰撞”。
這種情況下,號主面對不停發來的短信,他難道沒有意識到自己的號正在被人嘗試登錄嗎?當號主知道這個事情以后,密碼一改,對面冒用者此時連密碼這關都過不了了!
當然,如果號主的電腦被劫持了,冒用者通過操作號主的電腦去干一些什么事情,那我就真沒辦法了!但是,號主能做的,就是關閉電腦,然后使用另一臺電腦去更改賬戶登錄信息。
并且,我們軟件后臺還可以直接屏蔽IP,多種防護措施下,我想問,六位驗證碼比四位驗證碼強到哪里去?
當然,我不可否認的是,至少從賬面上看,“碰撞”六位數的確要比“碰撞”四位數要難100倍!那也僅僅只是賬面上而已。
實際情況中,如果不是軟件后臺被攻克、使用者電腦被劫持、軟件總控制中心被劫持、手機被盜等等讓號主無法及時作出處理的事情,軟件密碼加上手機驗證碼基本上是無懈可擊的!
但是,我還是堅持開始的那種觀點,但凡賬號冒用者使用一些技術手段能夠繞過軟件后臺的一系列防護措施,以我上家公司的技術,根本是應對不了的!而且,賬號冒用者如果真有這個技術,他還要去使用“碰撞密碼”這種原始的盜號手段嗎?
所以,你作為一個程序員,只看到了四位數驗證碼比六位數驗證碼被“碰撞”成功的概率大了100倍,沒看到我系統里面做了什么限制,上來就說不安全,我覺得這不是程序員說出來的話!
結語
如果是現在讓我做這個功能,我估計也會使用六位數驗證碼,那也僅僅是六位數驗證碼相對來說用得多而已,沒有別的想法!
與其擔心四位數手機驗證碼被“碰撞”,倒不如花點時間提升一下自己對于計算機安全防護這方面的知識,讓“碰撞”者連輸入驗證碼的機會都沒有!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.