web-dev-qa-db-fra.com

Mot de passe oublié et révélation de l'existence du compte

Ainsi, lorsque vous cliquez sur ce lien de mot de passe oublié et entrez votre adresse e-mail, il semble que les sites (et les autres programmeurs avec lesquels j'ai parlé) sont l'un des deux états d'esprit;

  • Avertissez l'utilisateur si l'adresse e-mail correspond ou non à celle de la base de données et, sur cette base, indiquez si un e-mail de réinitialisation du mot de passe a été défini ou;
  • Répondez immédiatement par un "e-mail envoyé" ou "si cet utilisateur existe, nous vous avons envoyé un e-mail de réinitialisation de mot de passe", qu'une correspondance se soit produite ou non, entraînant l'envoi d'un e-mail. Cela se fait (apparemment) pour des raisons de sécurité.

J'ai implémenté ce dernier moi-même et j'ai généralement constaté que cela dérangeait les utilisateurs en raison de;

  1. Si un utilisateur saisit mal son adresse e-mail, un message lui est envoyé, mais il n'en recevra jamais.
  2. S'ils ont tapé une adresse e-mail différente de celle avec laquelle ils se sont inscrits, ils ne recevront à nouveau aucun e-mail.
  3. Une combinaison de ce qui précède peut entraîner plusieurs tentatives mais pas de réception d'un e-mail de réinitialisation de mot de passe, ce qui entraîne l'abandon.

Enfin, après enquête sur des sites Web populaires qui utilisent le deuxième scénario, j'ai constaté qu'en tentant d'enregistrer un compte auprès de ces sites où l'adresse e-mail entrée correspond à un compte existant, un type "cette adresse e-mail est déjà utilisée ou indisponible" le message s'affiche quand même.

En tant que tel, quels sont les avantages qui ne révèlent pas si un e-mail de réinitialisation de mot de passe correspond à un compte, et, comment sont-ils bénéfiques lorsque l'inscription nécessite la révélation de correspondances par e-mail?

23
Stafford Williams

Il y a parfois un compromis entre sécurité et convivialité.

S'il est important pour vous ou vos utilisateurs que d'autres personnes ne sachent pas qu'ils utilisent le site, votre deuxième choix est le meilleur.

Vous pouvez toujours envoyer un e-mail à une adresse qui n'existe pas dans votre système, comme "Quelqu'un a demandé une réinitialisation du mot de passe pour cette adresse, mais ce n'est pas dans notre système". Cela traite votre deuxième plainte.

Ajoutez un lien pour refaire la réinitialisation du mot de passe sur la page de confirmation. Espérons qu'ils taperont correctement l'e-mail la prochaine fois.

Donc, décidez si éviter l'énumération des utilisateurs est plus important que l'adresse e-mail occasionnellement mal tapée.

Quels sont les avantages qui ne révèlent pas si un e-mail de réinitialisation de mot de passe correspond à un compte

Vous ne donnez pas ou ne confirmez pas la liste des adresses e-mail des utilisateurs à un attaquant et ne faites pas savoir aux autres qu'un utilisateur donné utilise votre site. Si c'est un site sur les chatons, qui s'en soucie? S'il s'agit d'une banque ou d'un site d'affaire extraconjugale, c'est important.

En quoi sont-ils bénéfiques lorsque l'inscription nécessite la révélation des correspondances par e-mail?

Qui a dit que l'inscription l'exige? Faites de même pour l'inscription. Demander l'adresse e-mail, envoyer le lien "étape 2" ou "quelqu'un a demandé une inscription sur notre site mais cette adresse est déjà enregistrée".

13
Neil McGuigan

Donc, je suppose qu'en tant qu'amorce, nous devons considérer ce qu'un attaquant peut réellement faire si vous confirmez/niez l'existence d'un e-mail sur votre système d'une manière facilement accessible. Ceci est un scénario possible:

  • Un attaquant a accédé à une base de données d'adresses e-mail + mots de passe compromis. (c'est-à-dire qu'ils peuvent se connecter à n'importe quel e-mail de ces utilisateurs)
  • Ils veulent accéder à certains des comptes de vos utilisateurs sur votre service.
  • Votre service confirmera ou refusera l'existence d'un compte avec une adresse e-mail.

Dans ce cas, ils peuvent simplement essayer tous les e-mails qu'ils ont dans leur base de données contre votre fonction de réinitialisation de mot de passe, rassembler les résultats renvoyés et si vous avez confirmé qu'ils existent, connectez-vous à ces e-mails et suivez le lien de réinitialisation de mot de passe.

S'il est assez facile de suivre le processus d'inscription, vous avez raison de supposer que la réinitialisation du mot de passe étant opaque n'apporte aucune sécurité supplémentaire. Ils peuvent simplement effectuer l'attaque susmentionnée sur la page d'inscription au lieu de la page de réinitialisation du mot de passe.

Voici quelques moyens auxquels je peux penser pour atténuer cela:

  • Forcer les utilisateurs à s'inscrire avec un nom d'utilisateur ou à leur attribuer un nom d'utilisateur lors de leur inscription et à les obliger à l'utiliser à partir de là plutôt qu'à leur adresse e-mail.
  • Ne leur permettez pas de se connecter avant d'avoir cliqué sur l'e-mail de confirmation. De cette façon, si quelqu'un essaie de s'inscrire avec un e-mail déjà enregistré, dites simplement "nous avons envoyé un e-mail de confirmation à votre adresse e-mail, cliquez dessus pour vous connecter"
  • Essayez d'implémenter une sorte de méthode anti-force brute sur des pages qui peuvent confirmer/nier l'existence d'une adresse e-mail, comme un CAPTCHA.

Cependant, comme indiqué précédemment, ces deux facteurs ont un impact relativement significatif sur la convivialité. Comme toujours, la sécurité est toujours un compromis entre praticité et paranoïa.

2
Nic Barker

Jusqu'à présent, les réponses sont bonnes, mais il est important de noter que du point de vue du profilage, je m'en fiche si je n'entre pas dans leur compte, mais les connaissances qu'ils utilisent un service suffisent pour ingénier socialement une situation/surveiller leurs flux sociaux pour les mots de passe potentiels (animaux, enfants, voitures, etc.).

Cela étant dit, lors de l'inscription de l'utilisateur, ce serait un mauvais mouvement UX (ou au moins un champ de mines) d'expliquer à l'utilisateur que l'adresse e-mail peut être ou non déjà utilisée. Vous pourriez trouver une logique funky qui leur permet de recréer un compte et de leur envoyer des e-mails en disant "hé, on dirait que vous avez déjà un compte" mais c'est maladroit et franchement une perte de temps pour l'utilisateur. Il en va de même avec une page de connexion - "utilisateur/pass invalide" pour avec ou sans compte est une bonne habitude ... mais lorsque la page d'inscription donne ces informations librement ET vous courez le risque que les utilisateurs soient ennuyés s'ils pensent qu'ils vous êtes inscrit mais pas.

Personnellement, j'essaie autant que possible d'utiliser OpenID pour les services Web pour éviter que ce scénario ne se produise. Nous avons tous un compte Google/Facebook/Twitter ces jours-ci ...

2
ScottMcGready