2010-03-01 5 views
8

Quel est le moyen le plus sûr de gérer les réinitialisations de mot de passe/mot de passe oublié? Devrais-je envoyer le mot de passe par e-mail à l'utilisateur? Dans ce cas, les forcez-vous à le réinitialiser? Ou les laissez-vous réinitialiser immédiatement (sans envoyer d'e-mail) et exiger d'autres informations pour vérifier que ce sont eux? Ou y a-t-il une meilleure méthode?Sécuriser les moyens de réinitialiser le mot de passe ou de donner un ancien mot de passe

+0

Il y a eu récemment une énorme discussion sur ce même sujet: http://stackoverflow.com/questions/2283937/how-should-ethethic-ethically-approach-user-password-storage-for-later-plaintext-retriev –

+0

Si votre système a la capacité de rechercher le mot de passe d'un utilisateur et de l'envoyer par courriel, vous avez fait quelque chose de très mal. Vous ne devriez jamais être capable de rechercher le mot de passe d'un utilisateur. Vous devriez seulement pouvoir hacher un mot de passe entrant et le comparer, ou le changer et envoyer le nouveau mot de passe. – Scott

Répondre

14

Vous ne pouvez envoyer le mot de passe à l'utilisateur, parce que vous ne savez pas. Vous l'avez "haché" par applying something like PBKDF2 or bcrypt pour le stockage, non? Si vous réinitialisez le mot de passe sans le confirmer avec le propriétaire du compte, un attaquant peut refuser l'accès à son compte au propriétaire, au moins jusqu'à ce qu'il consulte son adresse e-mail, en utilisant l'adresse e-mail de la victime pour demander une réinitialisation.

Une méthode suffisamment sûre pour de nombreuses applications consiste à envoyer par courrier électronique un lien au propriétaire du compte, contenant un grand nombre généré de façon aléatoire. Ce jeton ne devrait être valide que pour une durée limitée. Si le propriétaire souhaite réinitialiser son mot de passe, il clique sur le lien et l'authentifie en tant que propriétaire du compte. Le propriétaire du compte peut alors spécifier un nouveau mot de passe.

0

Je suppose que vous allez le faire par programmation? Ou est-ce une question pour Server Fault?

L'un des moyens consiste à envoyer un lien vers le compte de messagerie de l'utilisateur. Il clique sur le lien et est redirigé vers votre formulaire Web sécurisé où il réinitialise le mot de passe.

Ne pas le mot de passe e-mail à l'utilisateur

5

Vous ne devez pas envoyer de mot de passe par courrier électronique. Voici un processus étape par étape que j'ai utilisé:

  1. Donner aux utilisateurs une option de réinitialisation du mot de passe.
  2. Cette option enregistre un jeton unique pour un utilisateur. Le jeton expire éventuellement (heures, jours ou jours).
  3. Un lien est envoyé par e-mail à l'utilisateur, qui inclut le jeton.
  4. L'utilisateur clique sur le lien e-mail.
  5. Si le jeton existe et n'a pas expiré, le lien charge un nouveau formulaire de mot de passe. Si ce n'est pas, ne chargez pas le nouveau formulaire de mot de passe.
  6. Une fois que l'utilisateur a défini un nouveau mot de passe, supprimez-le et envoyez-lui un e-mail de confirmation.

Jusqu'à ce que le nouveau mot de passe soit défini, l'ancien mot de passe doit rester actif. Ne pas oublier de hacher et saler les mots de passe!

Questions connexes