Question

  

Possible en double:    Mot de passe oublié: quelle est la meilleure méthode de la mise en œuvre d'une fonction de mot de passe oublié?

Je suis la programmation d'un site communautaire.

Je veux construire une fonction « oublié mon mot de passe ».

Recherche autour de différents sites, j'ai trouvé qu'ils emploient un des trois options :

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

  2. envoyer à l'utilisateur un email avec nouveau mot de passe généré aléatoirement (Wordpress)

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

# 3 semble le plus pratique pour l'utilisateur, mais depuis que j'enregistrer les mots de passe comme un hachage MD5, je ne vois pas comment l'option n ° 3 serait disponible pour moi depuis que MD5 est irréversible . Cela semble aussi être l'option insécurité car cela signifie que le site doit être sauver le mot de passe en texte clair quelque part, et au moins le mot de passe en texte clair est envoyé par courrier électronique non sécurisé à l'utilisateur . Ou suis-je manque quelque chose ici?

Donc, si je ne peux pas l'option 1, # 2 semble être le plus simple à programmer depuis que je viens de changer le mot de passe de l'utilisateur et l'envoyer à lui. Bien que ce soit un peu d'insécurité , puisque vous devez avoir un mot de passe en direct sont communiqués par e-mail non sécurisé. Cependant, cela pourrait aussi être utilisé à mauvais escient par des fauteurs Les utilisateurs de Pester en tapant dans des e-mails au hasard et en constante évolution des mots de passe des différents utilisateurs.

# 1 semble être le le plus sûr mais nécessite un peu de programmation supplémentaire pour faire face à une URL cachée qui arrive à échéance, etc., mais il semble être ce que le grands sites utilisent.

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

Était-ce utile?

La solution

4) créditant leur compte bancaire avec deux montants aléatoires et demandez-leur d'entrer dans les.
5) Snail les poster un nouveau mot de passe et leur demander d'entrer dans.
6) Demandez-leur de texte ou appeler un certain numéro et entrez une valeur à un numéro de téléphone avec le téléphone mobile, ils enregistrés dans le dossier.
7) Sortez du problème de gestion de mot de passe tout à fait en sous-traitance à des fournisseurs comme OpenID Stack Overflow, Facebook, les moteurs de blog, et d'autres commencent à le faire.

En dehors de ceux-ci, utilisez l'option n ° 1 ou n ° 2 avec la caractéristique supplémentaire que les deux viennent à échéance dans une heure.

Autres conseils

Je suis choqué par les upvotes sur les réponses décrivant # 1 et # 2 comme équivalent. Ils ne sont pas du tout. L'envoi à l'utilisateur un lien à court terme pour changer leur mot de passe est l'approche la plus pratique, le plus souvent utilisé, et le plus sûr qui ne comporte pas de l'interaction de la bande (courrier, texte msg, etc.). Quelques raisons:

  1. Définition d'un mot de passe temporaire via un lien de mot de passe oublié permet aux utilisateurs de modifier efficacement le mot de passe d'un utilisateur et verrouiller un utilisateur de leur compte s'ils connaissent la connexion de l'utilisateur. Avec un lien, l'utilisateur sait simplement quelqu'un de déconner et leur accès ne sont pas touchés.
  2. Le lien de réinitialisation de mot de passe est valable uniquement pour une courte période, donc il y a une petite fenêtre pour un attaquant de grève. Et même s'ils l'ont fait, l'utilisateur sache parce que le lien de réinitialisation ne fonctionnerait plus si l'attaquant a intercepté le lien et l'a utilisé pour changer le mot de passe. Si le nouveau mot de passe attribué n'est pas modifié par l'utilisateur immédiatement, l'attaquant qui a intercepté le mot de passe peut usurper l'identité tranquillement l'utilisateur indéfiniment . Ainsi, la grande différence est, tandis qu'un pirate peut intercepter le courrier électronique de lien de mot de passe de réinitialisation, si elles utilisent le lien pour changer le mot de passe de l'utilisateur, l'utilisateur sait quelque chose est faux parce que le lien ne fonctionne pas et ils vont générer une autre demande de réinitialisation de mot de passe.
  3. plus facile à utiliser -. L'utilisateur clique simplement un lien dans leur e-mail plutôt que de taper un nouveau mot de passe aléatoire que vous avez généré

Et les questions de sécurité font 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 Manuel de l'application Web Hacker une excellente discussion sur ce sujet.

Notez que l'option n ° 2 exige également que de garder une trace de l'ancien mot de passe et viennent à échéance le nouveau mot de passe aléatoire si elle n'est pas utilisé dans, disons 24 heures.

Sinon, je pourrais vous agacer par vous à plusieurs reprises l'émission d'un nouveau mot de passe aléatoire - si vous n'êtes pas près de votre e-mail que vous savez peut-être pas pourquoi vous ne pouvez pas vous connecter avec votre mot de passe habituel

.

En outre, s'il vous plaît éviter nécessitant une "question d'identification". Les réponses à ces questions sont généralement beaucoup plus facile à deviner / recherche que de vrais mots de passe - tout le monde puisse s'identifier comme moi. Voir l'histoire de Sarah Palin pour un exemple récent de la façon dont ceci est peu sécuritaire.

options 1 et 2 comme peu sûr que l'autre.

. Je l'ai dit. Si a été violée, il n'y a aucun moyen sûr raisonnable de faire les choses à moins que vous recueillir des données plus privées comme leur adresse, nom de jeune fille de la mère compte de messagerie de l'utilisateur -. Qui peuvent tous être deviné

La meilleure (mais le plus ennuyeux) version que je l'ai vu est où vous avez besoin de se rappeler une question secrète et une réponse secrète. Cela signifie que l'utilisateur doit se rappeler quelle question ils ont demandé, qui, bien sûr, on peut toujours oublier aussi!

S'ils oublient la question et que vous êtes une entreprise « réelle », il y a toujours la possibilité d'envoyer à l'utilisateur un jeton par la poste, avec des instructions sur la façon de réinitialiser tous leur sécurité ... Il est très improbable qu'un pirate informatique auront accès à leur courrier de la vie réelle.

Une inclinaison sur ce serait de recueillir un numéro de téléphone lorsque l'utilisateur a créé le compte. Si cela existait et ils pourraient ne me souviens pas de leurs détails, vous pouvez 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 à propos de # 2: Ne pas laisser le processus remplacer le mot de passe du compte courant. Si cela se produisait tout le monde pouvait dire qu'ils ont oublié le mot de passe de tout compte, ce qui déclenche beaucoup de changements indésirables de mot de passe.

Il n'y a pas de différence réelle entre la sécurité de l'option 1 ou 2. Option 1 est effectivement le même que précharger le nouveau mot de passe dans le formulaire.

En fait, la prévalence des attaques de phishing, on pourrait dire que favoriser l'utilisation de l'option 1 avec de longues URL pourrait rendre les gens moins alerte de cliquer sur les URL longues mystérieuses.

Lire la OWASP dix pour vous assurer que votre méthode est conforme.

est le lien direct.

Juste un petit mot sur quelque chose pas spécifiquement en ce qui concerne votre question. Vous avez mentionné que vous avez utilisé MD5 de hachage des mots de passe stockés. Peu importe si vous choisissez d'utiliser les options 1 ou 2 (3 va être le moins sûr que, pour des raisons évidentes), MD5 est un algorithme de hachage craqué, et peut effectivement rendre assez facile pour les pirates d'accéder à des comptes protégés par hachage MD5.

Vous pouvez en savoir plus sur la vulnérabilité il à l'adresse suivante: en.wikipedia.org/wiki/MD5

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

Option # 1 est probablement le meilleur. # 3 est précaire (et je suggère également d'utiliser quelque chose de plus fort que MD5, comme SHA1). Option n ° 2 n'est pas bon car il permet à toute personne au hasard de vous verrouiller de votre compte jusqu'à ce que vous vérifiez votre e-mail, sauf si vous utilisez une question de sécurité. Et les questions de sécurité sont souvent plus faciles à casser que les mots de passe.

Option n ° 1 a deux avantages majeurs par rapport # 2. Si un utilisateur tape au hasard dans mon adresse e-mail dans la case «J'ai oublié mon mot de passe », puis mon mot de passe ne sera pas remis à zéro. Aussi, il est un peu plus en sécurité dans qu'il n'y a pas d'enregistrement permanent du mot de passe du site stocké dans votre boîte de réception de gmail pour toujours.

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

Toutes ces solutions signifient que vous traitez votre boîte de réception de courrier électronique comme « un anneau » qui les gouverne tous. La plupart des services en ligne semblent faire cela de nos jours de toute façon.

Mon approche préférée est d'aller avec Openid si possible. la gestion de mot de passe est l'enfer que personne ne semble avoir tout à fait raison. Il est plus facile de remettre ce problème à quelqu'un d'autre.

Option 4: Exiger que l'utilisateur de réinitialiser le mot de passe en saisissant leur nom de compte et votre adresse e-mail. Tant que vous ne dévoilons pas les noms ou les adresses e-mail sur le site (Pourquoi voudriez-vous en ce jour et l'âge?) C'est 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:. Utilisez et passer OpenID la responsabilité à une 3ème partie à vous soucier de

Honnêtement si cela est beaucoup plus d'efforts que la plupart des sites ont besoin. I pour un comme recevoir des mots de passe par courrier électronique, car plaintext je les stocker 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 est en train de lire mon email je plus gros problèmes de soucis que les personnes utilisant mon compte twitter (si j'avais un). Bien sûr, les banques et les entreprises ont des exigences plus fortes, mais vous ne spécifiez pas ce que votre site est. C'est la clé de la meilleure réponse.

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

En ce qui concerne la programmation soit n ° 1 ou n ° 2, l'option 2 est plus facile à programmer mais # 1 n'est pas beaucoup plus difficile et les deux sont probablement aussi sûr que l'autre.

Quelle que soit l'option que vous choisissez, vous pouvez aussi envisager le rendre plus sécurisé, y compris les demandes de renseignements personnels (que vous obtenez lors de l'inscription) dans le cadre du processus de mot de passe oublié.

J'ai systèmes programmés où vous avez un nom d'utilisateur et d'obtenir un nouveau mot de passe que vous devez saisir votre identifiant et votre adresse e-mail. Vous pouvez obtenir envoyé 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 tout le courrier électronique, il y a moins sûr.

Les questions secrètes sont une approche de la part des renseignements personnels. Personnellement, je pense qu'ils ne proposent pas beaucoup de valeur que les gens ont tendance à choisir des questions que beaucoup de gens soit connaître la réponse, être en mesure de deviner ou être en mesure de savoir. Il est mieux que rien mais aussi longtemps que vous l'utilisez en conjonction avec une méthode déjà relativement sûre.

Il est évident que plus de ce que vous faites, plus le travail de programmation est.

La méthode est simple:

  1. Avoir un « me rappeler mon nom d'utilisateur » lien (entrer e-mail). Ne dites pas à l'utilisateur si un courriel a été envoyé ou non parce que les gens peuvent utiliser pour savoir si une adresse e-mail est d'un membre. Dites toujours à l'utilisateur de vérifier leur boîte de réception pour l'e-mail de rappel, mais seulement envoyer si quelqu'un est membre; et
  2. Demander à la fois le nom d'utilisateur et votre email pour obtenir envoyé un nouveau mot de passe unique. Ce mot de passe ne doit durer une heure. Lorsque l'utilisateur utilise, ils devraient être contraints de changer leur mot de passe immédiatement.

option 1 ou 2 serait bien. Comme vous l'avez dit, l'option 3 est peu sûr que vous devez stocker le mot de passe en texte clair. Vous pourriez probablement obtenir la fantaisie et utiliser un algorithme de chiffrement 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.

Il y a une option supplémentaire 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 les envoyez à la première étape quand ils ont oublié le mot de passe. Si le rappel ne permet 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 d'envoyer par la poste (ou peut-être même afficher directement sur la page).

Si vous les option 3 est Hashage indisponible et si vous n'êtes pas les tables de hachage, honte à vous. :)

Je préfère l'option 1, l'envoi d'un lien de mot de passe remis à zéro envoyé à leur courrier électronique qui leur permet (pour un temps limité) pour réinitialiser leur mot de passe. Il ne nécessite plus de travail, mais il est facile pour eux d'utiliser et, finalement, aussi sûr que leur processus de connexion e-mail.

Vous pouvez fait un mélange entre # 1 et # 2, en prenant des avantages à la fois:

Envoyer à l'utilisateur un email avec un lien vers une unique URL cachée qui lui permet de changer un nouveau mot de passe généré aléatoirement.

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

J'ai essayé quelques méthodes que je ne l'ai pas vraiment été heureux avec. Ce que j'ai réglé pour le prochain projet est de:

  1. L'utilisateur entre le nom d'utilisateur et l'adresse e-mail
  2. Courriel envoyé avec un lien contenant l'URL et guid qui a été param stocké dans db avec 48 heures d'expiration
  3. L'utilisateur confirme le mot de passe pour réinitialiser
  4. Nouveau mot de passe est envoyé par courrier électronique à l'utilisateur
  5. Connectez-vous avec le nouveau mot de passe ou affiche un message redirige vers la page de modifier le mot de passe.

Instruire l'utilisateur venir personnellement à vos bureaux et prouver son identité avec carte d'identité ou d'un passeport.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top