OTP Attempt 次數如何儲存、計數及重置規則?

在實現 OTP 驗證系統時,管理嘗試次數是一個重要的安全考量。 這可以防止暴力破解攻擊,並確保使用者在一定次數內輸入正確的 OTP。 以下是如何儲存、計數及重置 OTP 嘗試次數的規則說明:

儲存 OTP 嘗試次數

OTP 嘗試次數可以透過多種方式存儲,常見的有兩種:在記憶體快取(如 Memcached 或 Redis)中存儲,或在資料庫中持久化儲存。 每種方式都有其優缺點:

記憶體快取

使用 Memcached 或 Redis 等記憶體快取儲存嘗試次數可以快速讀寫,適用於高頻率驗證的場景。 記憶體快取的缺點是在服務重啟後資料會遺失。
資料庫:在資料庫中持久化儲存嘗試次數可以確保資料的持久性,不會因為服務重新啟動而遺失,但相對於記憶體緩存,讀寫速度較慢。

計數規則

對於每個 OTP 請求,系統需要追蹤使用者的嘗試次數。 一般的流程如下:

初始化嘗試次數:當使用者首次要求 OTP 時,初始化其嘗試次數為 0。
增加嘗試次數:每當使用者嘗試驗證 OTP 時,無論成功與否,嘗試次數都應增加 1。
檢查嘗試次數:在允許的最大嘗試次數內,使用者可以嘗試輸入 OTP。 如果超過最大嘗試次數(如 3 次),則應拒絕驗證,並提示使用者 OTP 驗證失敗。

重設規則

嘗試次數的重置通常在以下情況下進行:

OTP 驗證成功:使用者成功驗證 OTP 後,應重置其嘗試次數。

OTP 過期:當 OTP 過期時,應重置嘗試次數。 通常,OTP 有一個較短的有效期(如 5 分鐘),過期後使用者需要重新請求新的 OTP。
請求新的 OTP:使用者在 OTP 有效期內請求新的 OTP 時,也應重置嘗試次數。

attempt_count 是指 本次的otp ,還是包括重送?

attempt_count 通常指的是針對本次產生的 OTP 的嘗試次數,包括首次發送的 OTP 以及任何因使用者請求而重新發送的 OTP 的所有驗證嘗試。 換句話說,每當使用者請求新的 OTP 或係統因某種原因重新產生並發送 OTP 給使用者時,attempt_count 應該被重置為0,以便新的 OTP 有一全新的嘗試次數。

在實踐中,這意味著:

對於每個新的 OTP:不論是使用者首次請求或後續因任何原因(如使用者請求、上一個 OTP 過期等)重新產生的 OTP,其 attempt_count 都應該從 0 開始計數。

嘗試次數限制

attempt_count 用來限制使用者驗證特定 OTP 的嘗試次數。 如果使用者在嘗試次數達到限制(如3次)之前未能成功驗證 OTP,系統應阻止進一步的嘗試,並可能要求使用者重新要求一個新的 OTP。
重新發送OTP:當使用者因未能在有限的嘗試次數內成功輸入OTP 而請求重新發送OTP 時,系統應產生一個新的OTP,並且attempt_count 需要重置為0,因為這實際上開始了一個新的 驗證嘗試週期。

OTP Resend 次數如何儲存、計數及重置規則?

後續其實還要考慮重送機制的儲存、限制和解除方式,如下:

儲存

OTP 通常會儲存在伺服器的資料庫中。資料庫必須受到加密保護,以防止駭客竊取 OTP。

限制

為了防止駭客濫用 OTP 重送機制,系統可能會對重送次數和時間進行限制。例如,系統可能規定每小時只能重送 OTP 3 次。

解除

如果使用者忘記 OTP,可以透過系統提供的忘記密碼機制來解除 OTP。

前一篇文章資訊安全:前後端日期欄位輸入的一致性,如何相容Google Chrome和Mac Safari?
下一篇文章資訊安全,帳號登入,實施雙因素認證(2FA),實作案例-1:2FA 需要分辨 authenticator嗎?
學經歷 淡江大學資訊管理研究所 諸銘科技軟體發開部經理與教育事業部總監 專長 網路創業、網路行銷、創業貸款、個資保護、資訊安全、程式設計(ASP.NET VB.NET MVC C# Core 6) 資安與個資證照:CompTia Security+ , ISO 27701。 演講與課程經歷 工研院講師 勞動部微型創業鳳凰貸款顧問 台北市社會局 衛福部中央健保署 新北市政府勞工局 管科會 中國生產力中心 中衛中心 中山管理教育基金會 中華軟協 南科產協 青創會 青創會內訓 臺北青年職涯發展中心 經濟部樂活創業人才班 中小企業總會 外貿協會 高雄醫學大學 雲林科技大學 台北醫學大學 銘傳大學 明新科大 中台科大 台灣科技大學 師範大學 大葉大學 台北城市大學 聖約翰科技大學 萬能科技大學 輔英科大 明新科大 美和科大 嘉南藥理大學 東南科大 亞太創意技術學院 格致商工 霧峰農工 三重商工 新店戒護所 台南就業處 台灣知識庫 台北景福扶輪社 富邦人壽 台北國際書展

回覆留言

Please enter your comment!
Please enter your name here