首頁 >後端開發 >php教程 >如何在 PHP 中實現安全的「記住我」功能?

如何在 PHP 中實現安全的「記住我」功能?

Patricia Arquette
Patricia Arquette原創
2024-11-10 04:26:02652瀏覽

How to Implement a Secure

增強的用戶體驗:在PHP 中實現安全的「記住我」功能

為了方便用戶,「記住我」複選框提供了無縫的登入體驗透過在會話之間保留使用者的身份驗證。為了確保其安全性,了解在使用者瀏覽器中儲存 cookie 的最佳實踐至關重要。受到可信任部落格文章的啟發,讓我們探索此功能的穩健實現。

核心結構

單獨的資料庫表 auth_tokens 為儲存身分驗證資訊提供了基礎。它包含選擇器、令牌、使用者 ID 和過期時間戳等欄位。將選擇器和令牌分開可以防止 SELECT 查詢期間的定時攻擊,從而增強安全性。

啟動記住我

成功登入並啟動「記住我」後,將發生以下操作:

  1. 產生隨機選擇器(12 個字元)和驗證器(33 位元組)。
  2. 設定名為「remember」的 cookie,包含選擇器和 Base64 編碼的驗證器。
  3. 將選擇器、雜湊驗證器、使用者 ID 和過期時間戳記插入 auth_tokens 表中。

Re -頁面載入時進行身份驗證

在沒有活動會話且存在「記住」的情況下cookie 時,會執行以下操作:

  1. 從cookie 中提取選擇器和驗證器。
  2. 資料庫查詢以使用選擇器擷取對應的行。
  3. 比較使用安全性hash_equals() 函數將檢索到的雜湊驗證器與資料庫儲存的雜湊進行比較,防止計時
  4. 如果比較成功,則設定會話使用者ID 並重新產生登入令牌。

實現細節

選擇器使用 9 位元組的隨機數據,提供高水準的抗碰撞性。認證符使用33字節,保證了其不可預測性。雜湊驗證器的儲存可降低用戶假冒風險。

選擇器和驗證器的分離可確保恆定時間的資料庫查找,防止基於時間的攻擊。

透過遵守這些原則,「「記住我」功能成為安全、無憂的使用者體驗不可或缺的一部分。

以上是如何在 PHP 中實現安全的「記住我」功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn