短信驗證碼工作原理
我們的在注冊各大網站或者APP的時候,經常會遇到填寫驗證碼的情況。驗證碼的設置是平台為了驗證用戶身份而專門設置的安全機制。那么,問題來了:短信驗證碼在網絡上的工作流程是怎樣的呢?
短信驗證碼內部工作流程
1.使用random函數隨機生成一個驗證碼,位數可以自己定(一般是4位、6位驗證碼)
2.調用短信運營商的接口,並向其發送手機號和驗證碼數據。
3.短信運營平台初步審核將信息發送給三大運營商的某一家。
4.運營商最終審核,將信息發送到用戶手機上。(短信接口的參數一般包括:目標手機號,隨機驗證碼(或包含失效時間),平台接口地址,平台口令等;)
5.網站或app保存接口返回的信息
6.服務器端會將這些信息保存在會話控制器Session中,作為后期的驗證使用。
7.網站/APP接收用戶填寫的驗證碼信息
8.服務器端判斷用戶提交的驗證碼是否與儲存在會話控制器Session中的信息一致,如果一致就通過;否則就驗證失敗。(也可以同時驗證信息的失效時間)
============================================================================================================================
點擊獲取驗證碼時,倒計時,暫時設定倒計時的時間為180秒,
思路:
1,當點擊【獲取驗證碼】按鈕時,發送請求到后台,根據自己的規則生成4位,6位或者8位數字,在用一個標識作為key,將隨機數存到session中,我這里是用用戶名作為key。
2,發送驗證碼成功之后,前端開始倒計時,當倒計時的時間 = 0時,發送請求到后端,將用戶名作為參數傳人,從用戶名在session查找,得到發送驗證碼時保存到session中的隨機數,然后從session中清除。
3,假如在倒計時中,用戶已經輸入了驗證碼,此時停止倒計時,將輸入的驗證碼和用戶名作為入參,傳人后台,從session保存的驗證碼做比對,校驗是否正確,
4,假如驗證碼正確,將倒計時框置為不可用,假如錯誤,停止倒計時,提示【驗證碼有誤,請重新輸入】。
5,驗證碼正確,提交表單時定義一個標識,可以提交表單。
===============================================================================================
現在市面上有多種驗證碼類型,例如圖形驗證碼、滑動驗證碼、語音驗證碼、智力答題驗證碼等類型,短信驗證碼因其操作性簡單,時效性強,安全性高,成本低等優點,短信驗證碼幾乎成為了所有移動產品的標配。因此對短信驗證碼的機制進行分析,通過了解不同的短信驗證碼機制,我們可以更好地針對其來設計測試用例以及測試重點。現將目前市面上app的短信驗證碼機制做以下總結。
內容包含以下三個部分:
短信驗證碼相關機制
測試短信驗證碼的側重點
總結
短信驗證碼相關機制
驗證碼獲取機制
a. 不同業務場景的短信驗證碼
對於不同的業務場景,雖然發送短信驗證碼的接口是同一個,但是會區別不同的短信驗證碼發起類型而進行發送。常見的場景類似於注冊、忘記密碼、支付等,特別是涉及到用戶個人敏感信息和資金時,為了確認用戶本人操作時,通常會使用短信驗證碼進行二次認證。
b. 前后端校驗:提交Token參數校驗
前端(客戶端)在請求發送短信的時候,同時向服務端提交一個Token參數,請求中不會將手機號等明文參數直接傳給服務端。服務端對這個Token參數進行校驗,校驗通過之后,再向請求發送短信的接口向用戶手機發送短信。流程圖如下:
驗證碼時間&次數機制
以下時間和次數限制可以有效對單用戶的短信轟炸和多用戶的短信騷擾兩種攻擊場景進行防御。
a. 獲取時間限制
從發送驗證碼開始,前端(客戶端)會進行一個60秒的倒數,在這一分鍾之內,在該頁面,用戶是無法提交多次發送信息的請求的。即使退出頁面,重新再進入點擊獲取,會提示獲取驗證碼頻繁。
b. 次數限制-連續獲取,但不校驗
對使用同一個手機號在進行某些場景需要發送短信驗證碼操作時,連續獲取驗證碼但不校驗,系統可以對該手機號進行限制。達到設定次數提示超過上限,無法獲取。但只能避免人工手動刷短信,對於批量使用不同手機號碼來刷短信的機器無法進行限制。
c. 次數限制-連續獲取,同時校驗
對使用同一個手機號在一天內獲取驗證碼,有個最大值的限制。
驗證碼錯誤機制
對於同一個手機號,如果連續提交錯誤的驗證碼,達到一定次數,會導致該手機號鎖定一段時間,無法獲取,也無法校驗。
驗證碼超時機制
每次的短信驗證碼是有一定的時效性,超過一定的時間,校驗時會提示該驗證碼已失效,需要重新獲取。
驗證碼校驗機制
目前短信驗證碼的校驗分兩部分,前端通常會先校驗驗證碼的格式,位數等信息,服務端會對前端發送的內容進行校驗。避免將短信驗證碼暴露在返回中,驗證碼只存在服務端中並不能通過任何api直接獲取。
測試短信驗證碼的側重點
短信驗證碼有些功能點由於測試環境無法測試,需要在生產環境着重驗證的功能點;或者是其功能點在生產環境驗證成本過高,可以放在測試環境先行驗證。
短信驗證碼模板
由於測試環境不會真實發送短信到手機上,所以需要在生產環境上對短信的發送和短信模板進行測試。
短信驗證碼校驗開關
目前在測試環境測試短信驗證碼時,由於不是真實發送短信驗證碼到手機號上,所以通常是方便測試,會將其校驗關閉,即輸入滿足位數要求的驗證碼即可通過,或是輸入固定的驗證碼便可通過。這便要求在生產環境需要着重關注是否有校驗短信驗證碼。
若生產環境沒有打開校驗,不法分子便可以利用此漏洞使用任意手機號進行注冊帳號而從中獲利。
短信驗證碼次數&時間
在測試環境可以先對短信驗證碼次數和時間的閥值進行測試,避免在被惡意短信轟炸時,沒有達到防御效果。
短信驗證碼場景
短信驗證碼在整個app中有不同的應用場景,需要對每個場景的短信驗證碼的校驗進行測試,尤其涉及動帳類等場景。
總結
全面地了解驗證碼的機制,可以更好的幫助我們設計測試用例,抓住在測試環境及生產環境的側重點,針對性地對短信驗證碼進行測試,避免不法分子利用短信接口的漏洞進行惡意攻擊,給公司造成大量的金錢損失。
原文地址https://blog.csdn.net/gbp_Anl/article/details/81051772
原文地址http://dy.163.com/v2/article/detail/E64S9RC705380MKC.html