首頁 >後端開發 >php教程 >如何使用持久 Cookie 在 PHP 登入系統中安全地實現「記住我」功能?

如何使用持久 Cookie 在 PHP 登入系統中安全地實現「記住我」功能?

Susan Sarandon
Susan Sarandon原創
2024-11-10 00:36:02482瀏覽

How to Securely Implement

PHP 登入系統中用於安全「記住我」功能的持久Cookie

簡介

簡介

在PHP 登入系統中實現「記得我」功能需要在使用者的瀏覽器。此 cookie 允許使用者即使在關閉瀏覽器或重新啟動裝置後仍保持登入狀態。

資料庫結構
CREATE TABLE `auth_tokens` (
    `id` integer(11) not null UNSIGNED AUTO_INCREMENT,
    `selector` char(12),
    `token` char(64),
    `userid` integer(11) not null UNSIGNED,
    `expires` datetime,
    PRIMARY KEY (`id`)
);

要安全地儲存「記住我」信息,請在你的資料庫:

選擇器和令牌字段將用於存儲記住我

登錄後

setcookie(
    'remember',
    $selector . ':' . base64_encode($authenticator),
    time() + 864000, // expires in 10 days
    '/',
    'yourdomain.com',
    true, // TLS-only
    true  // http-only
);
當用戶登錄並選擇“記住我”選項時,生成一個隨機選擇器(12 個字元)和一個驗證器(33 個字元) bytes) 使用random_bytes() 函數或類似的方法來確保隨機性。

使用以下內容設定記住我 cookie code:

將選擇器、雜湊驗證器、使用者 ID 和過期時間插入 auth_tokens 表。

頁面載入時重新驗證
  1. 在後續頁面載入時,如果使用者尚未登入並且記得我cookie 為set:
  2. 從cookie 中提取選擇器和驗證器。
  3. 在 auth_tokens 表中查詢具有符合選擇器的行。
比較計算出的雜湊值使用 hash_equals() 使用儲存的雜湊驗證器擷取驗證器。

如果雜湊匹配,則透過設定會話資料並重新產生登入令牌來使用戶登入。

  • 詳細資料
  • 碰撞抵抗: 9位元組選擇器提供72位元防衝突性,33位元組驗證器提供264位元防衝突性。位元.
  • 雜湊驗證器:儲存驗證器的 SHA256 雜湊可以降低與資訊外洩相關的風險。
恆定時間比較:單獨的選擇器和驗證器欄位消除了對資料庫查找的潛在計時攻擊。

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

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