Quelle est la meilleure méthode" mot de passe oublié"? [dupliquer]

possibilité de dupliquer:

mot de passe oublié: quelle est la meilleure méthode pour mettre en œuvre une fonction mot de passe oublié?

Je programme un site communautaire.

je veux construire une fonctionnalité" Mot de passe oublié".

en regardant autour de différents sites, j'ai trouvé qu'ils emploient l'une des trois options :

  1. Envoyer à l'utilisateur un email avec un lien vers une URL unique et cachée qui lui permet de changer son mot de passe (Gmail et Amazon)

  2. Envoyer à l'utilisateur un email avec un nouveau mot de passe généré au hasard (Wordpress)

  3. Envoyer à l'utilisateur son mot de passe actuel (www.teach12.com)

Option #3 semble la plus pratique pour l'utilisateur, mais puisque je sauve des mots de passe comme un hachage MD5, Je ne vois pas comment l'option #3 serait disponible pour moi puisque MD5 est irréversible . Cela semble aussi être option non sécurisée car cela signifie que le site doit être enregistrer le mot de passe en clair quelque part, et au moins le mot de passe en clair est envoyé sur l'e-mail non sécurisé à l'utilisateur. Ou est-ce que je rate quelque chose ici?

donc si Je ne peux pas faire l'option #1, option #2 semble être le le plus simple pour programmer car je dois juste changer le mot de passe de l'utilisateur et l'Envoyer à lui. Bien que ce soit peu sûr car vous devez avoir un mot de passe en direct étant communiqué par e-mail non sécurisé. Toutefois, cela pourrait également être utilisé par les fauteurs de troubles pour utilisateurs pester en tapant dans les e-mails aléatoires et en changeant constamment les mots de passe de divers utilisateurs.

Option #1 semble être le plus sûr , mais nécessite un peu plus de la programmation de traiter avec une URL masquée qui expire, etc. mais il semble que ce utiliser les gros sites.

quelle expérience avez-vous de l'utilisation/programmation de ces différentes options? Y a-t-il des options que j'ai manquées?

53
demandé sur Community 2009-05-23 18:42:21

17 réponses

4) en créditant leur compte bancaire de deux montants aléatoires et en leur demandant de les inscrire.

5) Snail leur envoie un nouveau mot de passe et leur demande de l'entrer.

6) leur envoyer un message texte ou appeler un numéro et entrer une certaine valeur à un numéro de téléphone avec le téléphone mobile qu'ils ont enregistré sur le dossier.

7) sortir complètement du problème de gestion des mots de passe en l'externalisant aux fournisseurs OpenID comme Stack Overflow, Facebook, moteurs de blog, et d'autres commencent à le faire.

en dehors de ceux-ci, utilisez l'option #1 ou #2 avec la fonctionnalité ajoutée qui expirent toutes les deux en une heure.

34
répondu Jeff Moser 2009-05-23 23:36:12

je suis choqué par les notes positives sur les réponses qui décrivent les réponses #1 et #2 comme équivalentes. Ils ne sont pas du tout. Envoyer à l'utilisateur un lien à court terme pour changer son mot de passe est l'approche la plus pratique, la plus couramment utilisée et la plus sûre qui n'implique pas une interaction hors bande (courrier, SMS, etc.).). Quelques raisons:

  1. configurer un mot de passe temporaire via un lien Mot de passe oublié permet aux utilisateurs de changer efficacement le mot de passe d'un utilisateur et de verrouiller un utilisateur hors de leur compte s'ils connaissent le login de l'utilisateur. Avec un lien, l'utilisateur sait simplement que quelqu'un fait des bêtises et que son accès n'est pas touché.
  2. le lien de réinitialisation du mot de passe n'est valide que pour une courte période, Donc il y a une très petite fenêtre pour un attaquant de frapper. Et même si c'était le cas, l'utilisateur le saurait car le lien de réinitialisation ne fonctionnerait plus si l'attaquant interceptait le lien et l'utilisait pour changer le mot de passe. Si le nouveau mot de passe assigné n'est pas modifié par l'utilisateur immédiatement, l'attaquant qui a intercepté le mot de passe peut tranquillement usurper l'identité de l'utilisateur indéfiniment . Donc, la grande différence est, alors qu'un pirate peut intercepter le lien de mot de passe réinitialiser l'email, s'ils utilisent le lien pour changer le mot de passe de l'utilisateur, l'utilisateur saura que quelque chose ne va pas parce que le lien ne fonctionnera pas et ils vont générer une autre demande de mot de passe réinitialiser.
  3. plus facile à utiliser - l'utilisateur clique simplement sur un lien dans son courriel plutôt que de taper un nouveau mot de passe aléatoire que vous avez généré.

et les questions de sécurité rendent souvent un site moins sûr, pas plus - ils sont un autre vecteur d'attaque et souvent le maillon le plus faible. Je recommande fortement la lecture le Web Application Hacker's Handbook pour une excellente discussion sur ce sujet.

9
répondu Cory House 2010-08-04 17:00:50

notez que L'Option #2 vous demande également de garder trace de l'ancien mot de passe et d'expirer le nouveau mot de passe aléatoire s'il n'est pas utilisé dans les 24 heures.

sinon je pourrais vous ennuyer en vous émettant à plusieurs reprises un nouveau mot de passe aléatoire -- si vous n'êtes pas près de votre e-mail, vous pourriez ne pas savoir pourquoi vous ne pouvez pas vous connecter avec votre mot de passe normal.

aussi, s'il vous plaît éviter exigeant une"question d'identification". Les réponses à ces les questions sont généralement beaucoup plus faciles à deviner / rechercher que les mots de passe réels -- pour que tout le monde puisse s'identifier comme moi. Voir l'article Sarah Palin pour un exemple récent d'insécurité.

8
répondu Martin Geisler 2009-05-23 14:54:47

Options 1 et 2 aussi peu sûres l'une que l'autre.

là. Je l'ai dit. Si le compte e - mail de l'Utilisateur a été violé, il n'y a pas de moyen sûr raisonnable de faire les choses à moins que vous recueillez plus de données privées comme leur adresse, le nom de jeune fille de la mère-tout ce qui peut être deviné.

la meilleure version (bien que la plus ennuyeuse) que j'ai vu est où vous devez vous rappeler une question secrète et une réponse secrète. Cela signifie que l'utilisateur il faut se souvenir de la question qu'ils ont posée, qui, bien sûr, peut toujours être oubliée aussi!

S'ils oublient la question et que vous êtes une" vraie " entreprise, il y a toujours la possibilité d'envoyer un token à l'utilisateur par le poste, avec des instructions sur la façon de réinitialiser toute leur sécurité... Il est très peu probable qu'un hacker va avoir accès à leur courrier.

une erreur à cet égard serait de percevoir un numéro de téléphone lorsque l'Utilisateur a créé le compte. Si cela existait et ils ne pouvaient se souvenir de aucun de leurs détails, vous pourriez mettre en place une sorte de système d'appel automatisé qui leur a dit comment réinitialiser leurs détails.

et une chose à mentionner au sujet de #2: Ne laissez pas le processus écraser le mot de passe du compte courant. Si cela se produisait, quelqu'un pourrait dire qu'il a oublié le mot de passe de n'importe quel compte, déclenchant beaucoup de changements de mot de passe indésirables.

6
répondu Oli 2009-05-23 14:58:58

il n'y a pas de différence réelle entre la sécurité de l'option 1 ou 2. L'Option 1 est en fait la même que le préchargement du nouveau mot de passe dans le formulaire.

en fait, compte tenu de la prévalence des attaques d'hameçonnage, on pourrait soutenir que le fait d'encourager l'utilisation de l'option 1 avec de longues URLs pourrait rendre les gens moins vigilants à l'idée de cliquer sur de longues URLs mystérieuses.

4
répondu Cade Roux 2009-05-23 14:45:18

lisez le OWASP top ten pour vous assurer que votre méthode est conforme.

ici est le lien direct.

4
répondu karim79 2009-05-23 14:47:03

juste une petite note sur quelque chose qui n'est pas spécifiquement en rapport avec votre question. Vous avez mentionné que vous avez utilisé MD5 pour masquer les mots de passe stockés. Peu importe si vous choisissez d'utiliser les Options 1 ou 2 (3 va être le moins sécurisé car, pour des raisons évidentes), MD5 est un algorithme de hachage fissuré, et peut en fait rendre assez facile pour les pirates d'accéder à des comptes protégés par le hachage MD5.

vous pouvez en savoir plus sur la vulnérabilité à L'URL suivante: en.wikipedia.org/wiki/MD5

une meilleure solution de hachage serait quelque chose comme SHA, qui est encore un algorithme de hachage stable et sécurisé. Combiné avec l'option #1 ou #2, vous devriez avoir un système raisonnablement sécurisé en place pour protéger vos mots de passe utilisateurs, sauf pour les pirates les plus déterminés.

4
répondu jrista 2009-05-23 16:49:01

Option #1 est probablement la meilleure. #3 est peu sûr (et je suggère aussi d'utiliser quelque chose de plus fort que MD5, comme SHA1). L'Option #2 n'est pas bonne parce qu'elle permet à n'importe quelle personne au hasard de vous verrouiller hors de votre compte jusqu'à ce que vous vérifiez votre email, sauf si vous utilisez une question de sécurité. Et les questions de sécurité sont souvent plus faciles à résoudre que les mots de passe.

2
répondu Zifre 2009-05-23 14:54:07

L'Option n ° 1 présente quelques avantages majeurs par rapport à l'Option n ° 2. Si un utilisateur tape au hasard mon adresse e-mail dans la case "j'ai oublié mon mot de passe", alors mon mot de passe ne sera pas réinitialisé. En outre, il est légèrement plus sûr en ce sens qu'il n'y a pas d'enregistrement permanent du mot de passe du site stocké dans votre boîte de réception gmail pour toujours.

une pièce manquante critique ici est que le lien que vous fournissez dans # 1 ne devrait fonctionner que pour un mot de passe réinitialisé et avoir une limite de temps

toutes ces solutions signifient que vous traitez votre boîte de réception de courriel comme" un anneau " qui les gouverne tous. La plupart des services en ligne semblent faire cela maintenant des jours de toute façon.

Mon approche préférée est d'aller avec openid, si possible. La gestion des mots de passe est l'enfer que personne ne semble obtenir tout à fait raison. Il est plus facile de remettre ce problème à quelqu'un d'autre.

2
répondu Sam Saffron 2009-05-23 20:30:42

Option 4: L'utilisateur doit réinitialiser le mot de passe en entrant son nom de Compte et son adresse e-mail. Tant que vous ne divulguez pas les noms réels ou les adresses e-mail sur le site (pourquoi le feriez-vous de nos jours?) il s'agit d'une méthode raisonnablement sûre et inviolable. Envoyer un lien vers une page de réinitialisation, pas le mot de passe lui-même.

Option 5: utiliser OpenID et passer la responsabilité à un tiers pour s'en inquiéter.

honnêtement bien que ce soit beaucoup plus d'effort que la plupart des sites nécessitent. Pour ma part, j'aime recevoir des mots de passe en clair par courriel parce que je les stocke dans un dossier "inscriptions" dans ma boîte de réception. De cette façon, je peux rechercher des mots de passe pour les sites quand je les oublie (ce qui arrive beaucoup!). Si quelqu'un lit mon e-mail, j'ai de plus gros problèmes à régler que les utilisateurs de mon compte twitter (si j'en avais un). Bien sûr, les banques et les entreprises ont des exigences plus strictes, mais vous n'avez pas précisé ce que votre site est. C'est la clé pour la meilleure réponse.

1
répondu SpliFF 2009-05-23 16:03:12

je suis d'accord avec vos commentaires sur l'option #3 étant peu sûre.

comme pour la programmation #1 ou #2, l'option #2 est plus facile à programmer mais #1 n'est pas beaucoup plus difficile et les deux sont probablement aussi sûrs l'un que l'autre.

quelle que soit l'option choisie, vous pouvez également envisager de la rendre plus sécuritaire en incluant les demandes de renseignements personnels (que vous obtenez lors de l'inscription) dans le cadre du processus de mot de passe oublié.

j'ai programmé les systèmes où vous avez un nom d'utilisateur et d'obtenir un nouveau mot de passe, vous devez entrer votre identifiant et votre adresse e-mail. Vous pouvez recevoir un rappel de votre nom d'utilisateur, mais le point principal est que quelqu'un ne sera probablement pas en mesure de deviner votre nom d'utilisateur et votre e-mail, mais si vous le faites juste sur E-Mail, Il ya moins sûr.

questions Secrètes sont une approche de l'information personnelle. Personnellement, je pense qu'ils n'offrent pas beaucoup de valeur en tant que personnes ils ont tendance à choisir des questions auxquelles beaucoup de gens connaîtront la réponse, pourront deviner ou seront en mesure de trouver la réponse. C'est mieux que rien, cependant, aussi longtemps que vous l'utilisez conjointement avec une déjà relativement sécurisées méthode.

évidemment, plus vous faites de choses, plus il y a de travail de programmation.

la méthode la plus simple est:

  1. Ont un "me rappeler de mon nom d'utilisateur" lien (entrez e-mail). Ne dites pas à l'utilisateur si un le courriel a été envoyé ou non parce que les gens peuvent l'utiliser pour savoir si une adresse courriel est d'un membre. Toujours demander à l'utilisateur de vérifier leur boîte de réception de l'e-mail de rappel, mais seulement l'envoyer si quelqu'un est membre; et
  2. nécessite à la fois un nom d'utilisateur et un e-mail pour recevoir un nouveau mot de passe unique. Ce mot de passe ne devrait durer qu'une heure environ. Lorsque l'utilisateur l'utilise, il doit être forcé de changer son mot de passe immédiatement.
1
répondu cletus 2012-05-10 06:21:53

L'une ou l'autre des options 1 ou 2 serait acceptable. Comme vous l'avez dit, l'option 3 n'est pas sécurisée car vous auriez besoin de stocker le mot de passe texte clair. Vous pourriez probablement obtenir fantaisie et utiliser un algorithme de cryptage réversible pour stocker/récupérer le mot de passe, mais avec de meilleures alternatives disponibles pour vous, il n'y a aucune raison d'aller dans cette voie.

0
répondu Justin Ethier 2009-05-23 14:48:35

Il existe une autre option que vous pouvez utiliser en combinaison avec l'une des options que vous mentionnez:

vous pouvez laisser l'utilisateur écrire un rappel pour leur mot de passe, que vous leur envoyez comme première étape quand ils ont oublié le mot de passe. Si le rappel n'aide pas l'utilisateur, vous pouvez passer à l'option suivante.

comme le rappel n'est pas le mot de passe lui-même, il est sûr à envoyer par courrier (ou peut-être même afficher directement sur la page).

0
répondu Guffa 2009-05-23 14:50:20

si vous les chassez, L'Option 3 n'est pas disponible et si vous ne les chassez pas, honte à vous. :)

je préfère l'option 1, en envoyant un lien de mot de passe réinitialisé envoyé à leur email qui leur permet (pour un temps limité) de réinitialiser leur mot de passe. Il exige plus de travail, mais il est facile pour eux d'utiliser et finalement aussi sûr que leur processus de connexion par courriel.

0
répondu Anthony Potts 2009-05-23 14:51:21

vous pourriez faire un mélange entre #1 et #2, en profitant des deux:

Envoyer à l'utilisateur un e-mail avec un lien vers une URL unique et cachée qui lui permet de changer un nouveau mot de passe généré au hasard.

cette page pourrait être SSL, et le mot de passe pourrait expirer dans 12-24 heures.

0
répondu eKek0 2009-05-23 15:01:42

j'ai essayé quelques méthodes qui ne m'ont pas vraiment plu. Ce que j'ai décidé pour le prochain projet est de:

  1. L'utilisateur entre le nom d'utilisateur et l'adresse e-mail
  2. e-mail envoyé avec lien contenant url et guid param qui a été stocké dans la base de données avec expiration 48 heures
  3. L'Utilisateur confirme que le mot de passe est réinitialisé
  4. nouveau mot de passe est envoyé à l'utilisateur
  5. Se connecter avec nouveau le mot de passe affiche le message ou redirige pour changer la page du mot de passe.
0
répondu Duncan 2010-07-01 21:21:52

demandez à l'utilisateur de venir personnellement à vos Bureaux et de prouver son identité avec une carte d'identité ou un passeport.

cela, bien sûr, suppose que vous avez des bureaux près de vos utilisateurs et que le compte sont assez précieux pour justifier cette procédure. Convient par exemple aux banques.

0
répondu Juha Syrjälä 2010-08-19 08:49:09