53 votes

Quelle est la meilleure façon d'implémenter la fonction "mot de passe oublié" ?

Je cherche la meilleure méthode pour mettre en place une fonction "mot de passe oublié".

J'ai deux idées :

  1. Lorsque l'utilisateur clique sur "Mot de passe oublié", il doit saisir son nom d'utilisateur, son adresse électronique et peut-être sa date de naissance ou son nom de famille. Un message contenant un mot de passe temporaire est alors envoyé à l'adresse électronique de l'utilisateur. L'utilisateur utilise le mot de passe temporaire pour se connecter et réinitialiser son mot de passe.

  2. Similaire, mais l'e-mail contiendrait un lien permettant à l'utilisateur de réinitialiser son mot de passe.

Ou quelqu'un peut-il me suggérer un moyen plus efficace et plus sûr ? Je pense également envoyer le mot de passe temporaire ou le lien, et obliger l'utilisateur à réinitialiser le mot de passe dans les 24 heures, sinon le mot de passe temporaire ou le lien ne sera pas utilisable. Comment faire ?

3voto

Tom Werner Points 119

Comme nous l'avons dit, cela dépend du niveau de sécurité requis. Toutefois, si vous avez besoin d'un niveau plus élevé, voici quelques solutions originales que j'ai vues ;

  • Affichage de la moitié du mot de passe temporaire lorsque l'identité de l'utilisateur a été confirmée (question de sécurité, adresse électronique, etc.), puis envoi de l'autre moitié au compte de messagerie. Si le compte de messagerie a été compromis, il est peu probable que la même personne ait également réussi à réaliser une attaque de type "man-in-the middle". (Vu sur UK Goverment Gateway)

  • Confirmation de l'identité par e-mail et par un autre moyen - par exemple un code envoyé par SMS à un téléphone portable enregistré. (Vu sur eBay / PayPal)

Entre ces deux extrêmes, la mise en place de questions de sécurité peut être la solution, comme le mentionne DaveG.

3voto

Dave Points 330

Troy Hunt soulève d'excellents points dans son article, Tout ce que vous avez toujours voulu savoir sur la création d'une fonction de réinitialisation sécurisée du mot de passe. . Les extraits les plus pertinents sont les suivants :

[Il existe deux approches communes :

  1. Générez un nouveau mot de passe sur le serveur et envoyez-le par courriel.
  2. Envoyez par courriel une URL unique qui facilitera le processus de réinitialisation.

Malgré de nombreuses indications contraires, le premier point n'est vraiment pas celui où nous voulons être. Le problème, c'est que cela signifie qu'un mot de passe permanent - que vous pouvez utiliser à tout moment - a été envoyé par un canal non sécurisé et se trouve maintenant dans votre boîte de réception.

...

Mais la première approche présente un autre problème de taille : elle simplifie à l'extrême le verrouillage malveillant d'un compte. Si je connais l'adresse électronique d'une personne qui possède un compte sur un site Web, je peux la bloquer quand bon me semble en réinitialisant simplement son mot de passe ; c'est une attaque par déni de service servie sur un plateau d'argent ! C'est pourquoi une réinitialisation ne doit être effectuée qu'après avoir vérifié le droit du demandeur à le faire.

Lorsque nous parlons d'une URL de réinitialisation, nous parlons d'une adresse de site Web qui est unique pour cette instance spécifique du processus de réinitialisation.

...

Ce que nous voulons faire, c'est créer un jeton unique qui peut être envoyé dans un e-mail dans le cadre de l'URL de réinitialisation, puis être associé à un enregistrement sur le serveur avec le compte de l'utilisateur, confirmant ainsi que le propriétaire du compte e-mail est bien celui qui tente de réinitialiser le mot de passe. Par exemple, le jeton peut être "3ce7854015cd38c862cb9e14a1ae552b" et est stocké dans une table avec l'ID de l'utilisateur effectuant la réinitialisation et l'heure à laquelle le jeton a été généré (nous y reviendrons dans un instant). Lorsque l'e-mail est envoyé, il contient une URL telle que "Reset/?id=3ce7854015cd38c862cb9e14a1ae552b" et lorsque l'utilisateur la charge, la page vérifie l'existence du jeton et confirme par conséquent l'identité de l'utilisateur et permet de modifier le mot de passe.

...

L'autre chose que nous voulons faire avec une URL de réinitialisation est de limiter dans le temps le jeton de sorte que le processus de réinitialisation doit être terminé dans une certaine durée, disons dans une heure.

...

Enfin, nous voulons nous assurer qu'il s'agit d'un processus unique. Une fois le processus de réinitialisation terminé, le jeton doit être supprimé afin que l'URL de réinitialisation ne soit plus fonctionnelle. Comme pour le point précédent, il s'agit de s'assurer qu'un attaquant dispose d'une fenêtre très limitée pour abuser de l'URL de réinitialisation. De plus, le jeton n'est plus nécessaire si le processus de réinitialisation s'est terminé avec succès.

Il soulève de nombreux autres points intéressants concernant la prévention des fuites d'informations, les CAPTCHA, l'authentification à deux facteurs et, bien sûr, les meilleures pratiques de base comme le hachage des mots de passe. Il est important de noter que je ne suis pas d'accord avec Troy sur l'utilité des questions de sécurité. Le scepticisme de Bruce Schneier à l'égard de cette pratique :

L'intérêt de toutes ces questions est le même : un mot de passe de secours. Si vous oubliez votre mot de passe, la question secrète peut vérifier votre identité afin que vous puissiez choisir un autre mot de passe ou que le site vous envoie votre mot de passe actuel par courrier électronique. C'est une excellente idée du point de vue du service clientèle - un utilisateur est moins susceptible d'oublier le nom de son premier animal de compagnie qu'un mot de passe aléatoire - mais c'est terrible pour la sécurité. La réponse à la question secrète est beaucoup plus facile à deviner qu'un bon mot de passe, et les informations sont beaucoup plus publiques.

1voto

KingAndrew Points 317

Voici trois très bons liens qui fournissent des informations sur la réinitialisation des mots de passe :

  1. http://jtauber.com/blog/2006/03/20/account_management_patterns/

  2. (Ne laissez pas les utilisateurs confirmer en utilisant GET) : http://www.artima.com/forums/flat.jsp?forum=106&thread=152805&start=15&msRange=15

  3. http://fishbowl.pastiche.org/archives/docs/PasswordRecovery.pdf

J'espère que cela vous aidera. Ils m'ont certainement aidé à comprendre le problème.

0voto

Andrew Harry Points 5488

J'imposerais des adresses électroniques uniques pour tous les comptes.

Il suffit ensuite d'envoyer un lien vers une page temporaire qui permet à la personne de changer son mot de passe. (prévoir 24 heures ou moins)

Le compte de messagerie de l'utilisateur est le maillon faible de ce scénario.

-1voto

Sucuri Points 217

N'envoyez jamais un mot de passe par courriel à l'utilisateur. Même s'il est généré automatiquement. Meilleure approche (recommandée et utilisée par SANS et d'autres) :

  1. Sur la page du mot de passe oublié, demandez l'email/l'identifiant de l'utilisateur et un NOUVEAU mot de passe à l'utilisateur.
  2. Envoyer un lien vers l'email stocké stocké pour ce compte avec un lien d'activation. d'activation.
  3. Lorsque l'utilisateur clique sur ce lien, activez le nouveau mot de passe.

S'il ne clique pas sur le lien dans les 24 heures environ, désactivez le lien (pour qu'il ne modifie plus le mot de passe).

Ne changez jamais le mot de passe sans le consentement de l'utilisateur. Cela signifie qu'il ne faut pas envoyer un nouveau mot de passe par courriel simplement parce que quelqu'un a cliqué sur le lien "mot de passe oublié" et a découvert le nom du compte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X