永続 Cookie を使用して PHP ログイン システムに「Remember Me」機能を安全に実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-10 00:36:02
オリジナル
421 人が閲覧しました

How to Securely Implement

PHP ログイン システムの安全な「Remember Me」機能のための永続 Cookie

概要

PHP ログイン システムに「記憶する」機能を実装するには、ユーザーのブラウザ内の安全な Cookie。この 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`)
);
ログイン後にコピー

セレクター フィールドとトークン フィールドは、Remember me を保存するために使用されます。

ログイン後

ユーザーがログインして「記憶する」オプションを選択すると、ランダム セレクター (12 文字) と認証子 (33 文字) が生成されます。 bytes) を使用して、random_bytes() 関数または同様の方法を使用してランダム性を確保します。

次のコマンドを使用して、Remember me Cookie を設定します。コード:

setcookie(
    'remember',
    $selector . ':' . base64_encode($authenticator),
    time() + 864000, // expires in 10 days
    '/',
    'yourdomain.com',
    true, // TLS-only
    true  // http-only
);
ログイン後にコピー

セレクター、ハッシュされた認証子、ユーザー ID、および有効期限を auth_tokens テーブルに挿入します。

ページ読み込み時の再認証

その後のページの読み込み時に、ユーザーがまだログインしておらず、記憶する Cookie が無効になっている場合、 set:

  1. Cookie からセレクターと認証子を抽出します。
  2. 一致するセレクターを持つ行について auth_tokens テーブルをクエリします。
  3. 計算されたハッシュを比較します。抽出された認証子と保存されたハッシュされた認証子を使用してhash_equals().
  4. ハッシュが一致する場合は、セッション データを設定し、ログイン トークンを再生成してユーザーをログインします。

詳細

  • 衝突耐性: 9 バイトのセレクターは 72 ビットの衝突耐性を提供し、33 バイトの認証子は 264 ビットを提供します。
  • ハッシュ認証子: 認証子の SHA256 ハッシュを保存すると、情報漏洩に関連するリスクが軽減されます。
  • 定数時間比較: セレクター フィールドと認証フィールドが個別に設定されているため、データベース ルックアップに対する潜在的なタイミング攻撃が排除されます。

以上が永続 Cookie を使用して PHP ログイン システムに「Remember Me」機能を安全に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート