Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man die „Remember Me'-Funktionalität sicher in PHP-Anmeldesystemen mithilfe dauerhafter Cookies?

Wie implementiert man die „Remember Me'-Funktionalität sicher in PHP-Anmeldesystemen mithilfe dauerhafter Cookies?

Susan Sarandon
Susan SarandonOriginal
2024-11-10 00:36:02448Durchsuche

How to Securely Implement

Persistente Cookies für sichere „Remember Me“-Funktionalität in PHP-Anmeldesystemen

Einführung

Die Implementierung einer „Angemeldet bleiben“-Funktion in einem PHP-Anmeldesystem erfordert das Speichern eines sicheren Cookies im Browser des Benutzers. Mit diesem Cookie können Benutzer auch nach dem Schließen ihres Browsers oder dem Neustart ihres Geräts angemeldet bleiben.

Datenbankstruktur

Um die Erinnerungsinformationen sicher zu speichern, erstellen Sie eine separate Tabelle in Ihre Datenbank:

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`)
);

Die Selektor- und Tokenfelder werden zum Speichern der Erinnerung verwendet Informationen.

Nach dem Anmelden

Wenn sich ein Benutzer anmeldet und die Option „Angemeldet bleiben“ auswählt, generieren Sie einen Zufallsselektor (12 Zeichen) und einen Authentifikator (33 Bytes) mithilfe der Funktion random_bytes() oder einer ähnlichen Methode, um die Zufälligkeit sicherzustellen.

Setzen Sie das Erinnerungs-Cookie wie folgt Code:

setcookie(
    'remember',
    $selector . ':' . base64_encode($authenticator),
    time() + 864000, // expires in 10 days
    '/',
    'yourdomain.com',
    true, // TLS-only
    true  // http-only
);

Fügen Sie den Selektor, den Hash-Authentifikator, die Benutzer-ID und die Ablaufzeit in die Tabelle auth_tokens ein.

Erneute Authentifizierung beim Laden der Seite

Bei nachfolgenden Seitenladevorgängen, wenn der Benutzer nicht bereits angemeldet ist und das Cookie „Angemeldet bleiben“ aktiviert ist set:

  1. Extrahieren Sie den Selektor und den Authentifikator aus dem Cookie.
  2. Fragen Sie die auth_tokens-Tabelle nach der Zeile mit dem passenden Selektor ab.
  3. Vergleichen Sie den berechneten Hash des extrahierter Authentifikator mit dem gespeicherten gehashten Authentifikator unter Verwendung von hash_equals().
  4. Wenn die Hashes übereinstimmen, protokollieren Der Benutzer wird angemeldet, indem die Sitzungsdaten festgelegt und das Anmeldetoken neu generiert werden.

Details

  • Kollisionsbeständigkeit: Die 9 -Byte-Selektor bietet 72 Bit Kollisionsresistenz und der 33-Byte-Authentifikator bietet 264 Bits.
  • Hashing-Authentifikator: Durch das Speichern des SHA256-Hashs des Authentifikators werden die mit Informationslecks verbundenen Risiken gemindert.
  • Konstanter Zeitvergleich: Das Separate Selektor- und Authentifikatorfelder eliminieren potenzielle Timing-Angriffe auf Datenbanksuchen.

Das obige ist der detaillierte Inhalt vonWie implementiert man die „Remember Me'-Funktionalität sicher in PHP-Anmeldesystemen mithilfe dauerhafter Cookies?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn