Frage

Beste Praxis, wie ein RESET-Passwort-Token erstellt werden soll?Ich denke an:

zufällige 17 Zeichen [A-ZA-Z0-9] + Eine global eindeutige ID + zufällige 17 Zeichen [A-ZA-Z0-9].

Gibt es eine bessere Lösung oder einen Industriestandard bei RESET-Passwort-Token?

War es hilfreich?

Lösung

Es gibt einige wichtige Punkte, um zu berücksichtigen.

    .
  1. Der Code sollte wirklich zufällig sein (aus McRYPT_DEV_URANDOM) und sollte nicht von anderen benutzerbezogenen Informationen absteriert werden.
  2. Idealerweise ist der Code base62 codiert (A-Z A-Z 0-9), um Probleme mit der URL zu vermeiden.
  3. Laden nur Ein Hash des Tokens in der Datenbank , ansonsten kann ein Angreifer mit Lesezugriff auf die Datenbank jedes Konto zurücksetzen.
  4. Dies führt zu dem Problem, dass Sie den Hash des Tokens in der Datenbank finden müssen, nachdem der Benutzer den Link angeklickt hat. Es gibt zwei mögliche Möglichkeiten, das Token zu speichern:

      .
    • Sie haben das Token mit einem Hash-Algorithmus wie SHA512 ohne Salz. Dies ist sicher, wenn das Token sehr stark ist (Mindestlänge 20 mit 0-9 A-Z A-Z). Theoretisch müssen Sie überprüfen, ob ein solcher Hash bereits vorhanden ist, bevor Sie ihn in die Datenbank eingeben, in der Praxis ist dies vernachlässigbar. Ich habe einen password-zurücksetzen Klasse , der solche Liemen umgehen kann.
    • Sie haben das Token mit Brrypt und Salz. Dies ermöglicht kürzere Token, aber Sie können jedoch nicht nach dem Hashed Token in der Datenbank suchen. Stattdessen müssen Sie eine Zeilen-ID in den Link einfügen, um das Token zu finden.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top