PHP と Cookie を使用して安全な「Remember Me」機能を実装するにはどうすればよいですか?

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

How can I implement a secure

PHP ログイン システム: Remember Me (永続 Cookie)

はじめに

「Remember Me」機能を実装すると、ユーザーはブラウザを閉じた後もログイン状態を維持します。この機能により、ユーザーの利便性が向上し、全体的なユーザー エクスペリエンスが向上します。この記事では、永続的なログイン メカニズムのためにユーザーのブラウザに Cookie を保存および検証する安全な方法について詳しく説明します。

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`)
);
ログイン後にコピー

ログイン後のプロセス

「記憶する」オプションを有効にしてログインに成功すると、次のようになります。

  • 12 文字のセレクターを生成します (たとえば、base64_encode(random_bytes(9)) を使用します)。
  • 33 バイトの認証子を生成します (たとえば、random_bytes(33) を使用します)。
  • Cookie に次の値を設定します:

    'remember': $selector.':'.base64_encode($authenticator)
    ログイン後にコピー
  • セレクター、ハッシュされた認証子、ユーザー ID、および有効期限を auth_tokens データベース テーブルに保存します。

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

ユーザーを再認証するには:

if (empty($_SESSION['userid']) && !empty($_COOKIE['remember'])) {
    list($selector, $authenticator) = explode(':', $_COOKIE['remember']);

    $row = $database->selectRow(
        "SELECT * FROM auth_tokens WHERE selector = ?",
        [
            $selector
        ]
    );

    if (hash_equals($row['token'], hash('sha256', base64_decode($authenticator)))) {
        $_SESSION['userid'] = $row['userid'];
        // Regenerate login token and update database
    }
}
ログイン後にコピー

アプローチの詳細

  • 衝突耐性: セレクターに 9 バイトを使用すると、72 ビットのキースペースが提供され、十分な衝突耐性が確保されます。
  • 偽装保護: ハッシュされた認証子をデータベースに保存すると、なりすましのリスクが軽減されます。
  • タイミング攻撃対策: 比較前に認証子の値をハッシュし、認証子からセレクターを分離することで、タイミング リークを防ぎます。
  • データベース セキュリティ: auth_tokens テーブルを使用すると、期限切れのトークンを簡単に削除および期限切れにし、データベースの整合性を維持できます。

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

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