Question

Je l'ai vu plusieurs questions à ce sujet, mais il y a quelques questions qui ne sont pas posées. Si l'utilisateur oublie son mot de passe, je les aime pour pouvoir le réinitialiser avec seulement leur adresse e-mail (à savoir qu'il n'y a pas question de sécurité / réponse). Le mot de passe est stocké sous la forme d'un hachage salé, donc il n'y a pas de récupération possible. Au lieu de cela, je voudrais simplement que l'utilisateur d'entrer un nouveau mot de passe après avoir confirmé qu'ils ont demandé une remise à zéro.

  

Une méthode courante qui a été mentionné est simplement:

     

1) Créer un aléatoire Guid / Cryptographically fort nombre aléatoire

     

2) Envoyer une URL unique contenant le nombre aléatoire au courrier électronique de l'utilisateur   adresse

     

3) Une fois la confirmation, l'utilisateur est invité à modifier le mot de passe

Cependant, est-ce pas à une attaque de MITM? Si l'envoi d'un mot de passe temporaire sur Internet à un e-mail est peu sûr, quelle est la différence entre le faire et le simple envoi d'une URL unique que l'attaquant peut accéder à? Ai-je manqué quelque part étape clé qui rendra ce système plus sûr (ou est-il une meilleure façon de réinitialiser le mot de passe)?

Merci

Était-ce utile?

La solution

Si vous construisez correctement votre hachage, le clic url devra provenir de l'adresse IP qui a demandé la remise à zéro. Cela nécessiterait la MITM d'usurper l'adresse IP et / ou de falsifier les en-têtes. Bien que cela soit possible, plus unique, vous pouvez identifier le hachage du système en question, plus il devient difficile de « fin autour de » le hachage.

Il est également recommandé que le guid soit un hachage à sens unique de certains critères. Il est également possible de chiffrer les données du système dans la demande à l'aide d'une clé publique une clé privée déverrouille de sorte que lorsque l'URL est cliqué, ces mêmes données du système cryptées publiques doivent accompagner le hachage et le seul système qui pourrait déchiffrer ces valeurs serait la clé privée tenue au serveur. Fondamentalement, un attachement pseudo-PKI à la table de hachage.

Autres conseils

Vos moyens d'authentification de l'utilisateur est un secret partagé (mot de passe).

Si l'utilisateur oublie ce secret, vous avez besoin d'un moyen d'établir un nouveau secret partagé. Peu importe de quelle façon allez-vous, vous aurez encore le problème de l'authentification de l'utilisateur afin de partager ce nouveau secret.

Si la seule chose que vous savez sur l'utilisateur qui pourrait être utilisé pour les authentifier est leur adresse e-mail, alors vous aurez besoin d'un moyen de confirmer que l'utilisateur qui demande une remise à zéro est dans le contrôle de cette adresse e-mail.

Et la seule façon à ce jour pour le faire est de courrier électronique un secret à cette adresse e-mail et vérifier s'ils l'ont reçu.

Ce qui est toujours va être ouverte à une attaque sournoise MitM suffisamment.

La raison pour laquelle vous n'envoyez pas un mot de passe temporaire est d'éviter la question de « l'utilisateur ne peut pas être pris la peine de changer et donc continue d'utiliser le mot de passe temporaire non sécurisée au lieu de leur propre une sécurité. »

Afin d'atténuer le risque d'un homme dans l'attaque du milieu que j'utilise les mesures suivantes:

  • Une demande de remise à zéro peut être utilisé une seule fois.
  • Si une demande de réinitialisation n'est pas utilisé, il expire au bout d'une heure.
  • Toutes les demandes de remise à zéro sont permanence par si elle a été finalement terminé ou expiré.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top