Question

Toute meilleure pratique sur la construction d'un jeton de mot de passe de réinitialisation?Je pense:

aléatoire 17 caractères [A-ZA-Z0-9] + un ID unique globalement unique + 17 caractères aléatoires [A-ZA-Z0-9].

Y a-t-il une meilleure solution ou une norme de l'industrie sur les jetons de mot de passe de réinitialisation?

Était-ce utile?

La solution

Il y a quelques points importants à prendre en compte.

  1. Le code doit être vraiment aléatoire (lu depuis mcrypt_dev_urandom) et ne doit pas être désactivé à partir d'autres informations relatives à l'utilisateur.
  2. Idéalement, le code est de base62 codé (A-Z A-Z 0-9) pour éviter les problèmes avec l'URL.
  3. Store uniquement Un hachage du jeton dans la base de données , sinon un attaquant avec accès en lecture à la base de données peut réinitialiser tout compte.
  4. Cela conduit au problème que vous devez trouver le hachage du jeton dans la base de données, une fois que l'utilisateur a cliqué sur le lien. Il existe deux manières possibles de stocker le jeton:

    • Vous avez le jeton avec un algorithme de hachage comme SHA512 sans sel. Ceci est sécurisé si le jeton est très fort (longueur minimale 20 avec 0-9 A-Z A-Z). Théoriquement, vous devez vérifier si un tel hachage existe déjà avant de l'entrer dans la base de données, dans la pratique, cela est négligeable. J'ai implémenté un Classe de réinitialisation de mot de passe qui peut gérer de tels jetons.
    • Vous avez eu le jeton avec bcrypt et sel. Cela permet des jetons plus courts, mais vous ne pouvez pas rechercher le jeton haché dans la base de données. Au lieu de cela, vous devez inclure un identifiant de ligne dans le lien pour trouver le jeton.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top