web-dev-qa-db-fra.com

Quels sont les mécanismes de réinitialisation de mot de passe recommandés?

Tout,

Je développe une petite application Web non commerciale. J'essaie de décider comment aider un utilisateur qui pourrait avoir perdu son mot de passe. J'ai besoin d'un mécanisme qui soit, par ordre de priorité:
1) Convivial;
2) Sécurisé;
3) Facilement évolutif sur plusieurs zones géographiques (c’est-à-dire indépendant de la localisation, donc pas de SMS par exemple).

3
JDelage

Une approche alternative:

  1. Demandez à l'utilisateur de fournir l'adresse e-mail qu'ils ont utilisée lors de leur inscription

  2. Vérifier que l'adresse email appartient bien à un compte (signaler une erreur si ce n'est pas le cas)

  3. Envoyer un email à cette adresse email avec ...

    • ... un nouveau mot de passe généré automatiquement (les mots du dictionnaire valent mieux que les caractères aléatoires) et expire après une période de temps définie (par exemple, 24 heures)

    • ... un message indiquant que ce nouveau mot de passe a été envoyé comme demande de votre site Web et s'ils ne l'ont pas demandé pour ignorer cet email

    • ... l'URL qu'ils doivent visiter pour se reconnecter avec leur nouveau mot de passe (assurez-vous que cette page est validée par rapport au mot de passe temporaire et non à leur mot de passe réel)

  4. Après leur connexion initiale, amenez-les sur une page où ils doivent mettre à jour leur mot de passe pour un mot dont ils se souviendront (vous ne pouvez pas leur montrer leur mot de passe réel car vous l'avez haché, n'est-ce pas?)

2
John Conde

Mon mode opératoire standard:

Commencez par demander à l'utilisateur son adresse électronique ou son nom d'utilisateur. Si les informations ne sont pas trouvées, il est Nice d'avertir l'utilisateur que l'adresse est fausse, mais cela peut également aider les gens à forcer brutalement ces informations. Dans les systèmes où l'identifiant et l'adresse e-mail ne sont pas identiques, demander soit sur la même page peut être plus convivial que de les séparer sur des pages différentes.

Deuxièmement, générez un jeton unique et associez-le au compte. Envoyez un courrier électronique à l'adresse électronique de l'utilisateur contenant un lien qui intègre ce jeton dans l'URL, permettant ainsi la récupération du compte en un clic.

Troisièmement, lorsque l'URL avec le jeton est visité, Invitez l'utilisateur à entrer son nouveau mot de passe. Assurez-vous que le formulaire soumis inclut également le jeton. Remplacez le mot de passe de l'utilisateur par la nouvelle valeur souhaitée, puis invalidez le jeton.

Une variante que j'ai vue ajoute également un jeton seconde dans l'e-mail, qui doit être saisi sur la page de réinitialisation du mot de passe résultante.

Vous devez également invalider le jeton après une période de temps raisonnable, par exemple 48 heures.

Vous remarquerez ici l'absence de rappels de mot de passe ou de questions de sécurité. Si le compte de messagerie de l'utilisateur a été compromis, cela permet à un utilisateur potentiellement malveillant de pirater des comptes. Ceci n'est pas votre problème à résoudre. Vous pourriez ajouter une sorte de question de sécurité, mais avant cela, pensez à la dernière fois que vous avez été confronté à l'une d'entre elles et rappelez-vous à quel point elles sont douloureuses à l'arrière-train.

Si votre système permet à l'utilisateur de se connecter depuis plusieurs endroits (ce serait mieux!), Vous voudrez peut-être vous assurer que le ou les jetons que vous utilisez pour autoriser cela sont liés à la fois à l'adresse de messagerie et au mot de passe de l'utilisateur. Cela déconnectera l'utilisateur de tous les autres emplacements lorsque l'un de ces changements sera modifié.

1
Charles