web-dev-qa-db-fra.com

Comment dire à l'utilisateur que ses informations de connexion sont incorrectes?

Lorsqu'un utilisateur a entré des informations incorrectes dans un formulaire de connexion, est-il préférable de lui dire:

  • Le nom d'utilisateur ou le mot de passe que vous avez entré n'est pas valide.

ou

  • Le nom d'utilisateur que vous avez entré n'est pas valide (pour les noms d'utilisateur non valides)
  • Le mot de passe que vous avez entré n'est pas valide (pour les noms d'utilisateur valides mais les mots de passe invalides).

La première approche "pourrait" être plus sûre, car un attaquant ne pourrait pas confirmer si le nom d'utilisateur/l'adresse e-mail est valide. Dans le même temps, l'utilisateur peut être frustré de ne pas pouvoir se souvenir de l'adresse e-mail ou du nom d'utilisateur avec lequel il s'est inscrit.

La deuxième approche est clairement plus conviviale, mais un attaquant pourrait déterminer ce qu'est un nom d'utilisateur/e-mail valide, puis lancer une attaque en devinant le mot de passe.

Quelques exemples:

  • Amazon: There was an error with your E-Mail/Password combination. Please try again.
  • Hotmail: That Windows Live ID doesn't exist. Enter a different ID or get a new one. et That password is incorrect. Try again.

Comment dois-je procéder pour afficher ces erreurs?

63
F21

Vous devez aller avec la première option (indiquant que le "nom d'utilisateur ou mot de passe n'est pas valide"), et cela n'a rien à voir avec la sécurité.

Disons que j'utilise généralement JohnGB comme nom d'utilisateur, mais sur votre service, quelqu'un d'autre a ce nom d'utilisateur, j'utilise donc JohnGB123 à la place. Supposons que j'ai ensuite oublié mon nom d'utilisateur et que j'entre JohnGB comme nom d'utilisateur, mais utilisez mon mot de passe correct.

S'agit-il d'un mot de passe correct et d'un nom d'utilisateur incorrect ou d'un nom d'utilisateur correct et d'un mot de passe incorrect?

Il n'y a rien de tel que d'avoir un nom d'utilisateur correct sans son mot de passe correspondant, et aucun mot de passe correct sans son nom d'utilisateur correspondant. Les noms d'utilisateur et les mots de passe ne représentent rien lorsqu'ils sont utilisés en combinaison.

76
JohnGB

Je vais donner quelques conseils d'un point de vue Sécurité + UX. Je ne sacrifierais ni l'un ni l'autre pour l'autre. Avoir les deux.

  1. Il y a une question importante de pratiques sécurisées dans votre question. Le Best Practice du point de vue de la sécurité consiste à ne pas identifier l'entrée non valide et à avoir une réponse générique. Demandons ce que ferait Google et prenons l'exemple de gmail de Google: vous avez terminéenter image description here

  2. Vous passez par la section Impossible d'accéder à votre compte? lien, gmail finira par vous dire que ce compte n'existe pas:

enter image description here

C'est à vous de décider si vous voulez ou non le faire. Du point de vue de la sécurité, les attaquants peuvent commencer à collecter les noms d'utilisateur valides dans votre application. Du point de vue de la convivialité, vous venez d'aider quelqu'un à déterminer laquelle de ses innombrables adresses e-mail il a utilisées sur votre compte et vous pouvez vous connecter plus tôt.

Qui vous dit si un nom existe?

  • Twitter
  • Hotmail
  • Gmail

La pratique la plus sûre consiste à dire à l'utilisateur quelque chose comme: "Si une adresse e-mail valide a été entrée, des instructions pour réinitialiser votre mot de passe ont été envoyées"

Cela ne révélera pas le nom d'utilisateur. Votre première option est donc Certainement plus sûre.

Du point de vue de l'utilisabilité, vous pouvez certainement fournir plusieurs méthodes d'essayer de revenir sur le compte, ( connectez-vous avec Twitter, gmail, Facebook ... il y a des API pour ça).

Consultez cet article de Smashing Magazine qui passe en revue les nombreuses approches des formulaires de connexion:

http://uxdesign.smashingmagazine.com/2011/08/22/new-approaches-to-designing-login-forms/

Juste pour résumer: un utilisateur peut être frustré de ne pas se souvenir de quel email il a utilisé. Un utilisateur perdra toute confiance en vous si son compte est piraté car la sécurité contrevient à ux.

J'espère que cela aide Erics, je suis vraiment curieux de savoir quelle solution vous finissez par choisir.

Quelques trucs de sécurité technique: Pour en savoir plus sur l'énumération et le danger réel qu'elle entraîne:

Il peut également être utile d'en savoir plus sur la sécurité des mots de passe oubliés à partir de cette feuille de triche OWASP: https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet

Il donne les meilleures pratiques pour les applications d'entreprise, mais est également utile à garder à l'esprit. http://www.gnucitizen.org/blog/username-enumeration-vulnerabilities/

34
mustefa

La réponse dépend fortement du système pour plusieurs raisons. Un point valable est soulevé en disant que vous ne pouvez pas savoir s'ils ont le "bon" nom d'utilisateur s'ils n'ont pas le bon mot de passe, par exemple John déclare qu'il pourrait essayer d'accéder au mauvais John. Mais il y a plusieurs situations où me dire que le nom d'utilisateur existe peut m'aider.

Le nom d'utilisateur n'existe pas: Il n'y a aucune raison non liée à la sécurité de ne pas le faire savoir à votre utilisateur! Dans ce cas, vous sachez en fait que le nom d'utilisateur est incorrect, pas le mot de passe ou la combinaison nom d'utilisateur/mot de passe. Il est inutile de laisser un utilisateur taper furieusement pour se connecter à un compte inexistant à moins qu'il ne soit un bot/un agent malveillant. Vous pouvez utilement proposer quelque chose comme "Essayez-vous de vous inscrire? Cliquez ici ..." dans ce cas également, au cas où l'utilisateur n'a vraiment pas de compte et qu'il doit en créer un.

Mon nom d'utilisateur/login est mon e-mail: À moins que quelqu'un d'autre n'ait volé mon e-mail, vous pouvez assez bien supposer que l'utilisateur a tapé son e-mail correctement et qu'il n'est pas confus. Contrairement au système de nom d'utilisateur où des noms comme Bob et John sont immédiatement pris, dans un système de connexion par courrier électronique, les informations de connexion préférées des gens sont toujours disponibles car seules elles y ont accès dans un système bien conçu, car seule la personne ayant le contrôle de l'e-mail peut terminer la création d'un compte pour ce processus.

Ma connexion est un OpenID: Mêmes raisons que ci-dessus. Personne d'autre n'aurait pu utiliser ma connexion sans accéder à mes informations d'identification. Avec l'avènement des OpenID et la popularité de la connexion par e-mail, de nombreux utilisateurs n'ont plus à se soucier de savoir si je me suis inscrit en tant que John453453 ici ou John543553 à la place.

Cela dit, le message "mauvais mot de passe" ne se trompe pas; vous ne pouvez pas dire si ce mot de passe est faux ou correct pour l'utilisateur, juste s'il est faux ou correct pour le nom d'utilisateur entré. Un système avec trois messages est probablement le plus utile:
1: Connexion réussie! (Mot de passe et nom d'utilisateur correct).
2: Le nom d'utilisateur n'existe pas! Essayez-vous de vous inscrire? (nom d'utilisateur non "correct"/existant)
3: Mot de passe/nom d'utilisateur incorrect. (Le mot de passe et le nom d'utilisateur ne correspondent pas. Soulignez que le mot de passe est incorrect ici car la plupart des gens saisissent un mot de passe incorrect, pas leur nom d'utilisateur)

6
Ben Brocka

Je pense que la sécurité n'est pas un problème, sauf s'il s'agit d'un site d'agrandissement de pénis où être membre est quelque chose que les utilisateurs apprécieraient d'être discret. La plupart des sites qui choisissent l'option n ° 2 vous permettent toujours de récupérer un mot de passe par e-mail et de vous faire savoir si un tel nom d'utilisateur n'existe pas dans la base de données ...

Du point de vue du piratage, cela n'offre pas vraiment beaucoup d'avantages si le système répond qu'un nom d'utilisateur existe. Les systèmes raisonnables n'autoriseront pas trop de tentatives de toute façon, donc le maximum qu'un pirate puisse obtenir est la confirmation d'un e-mail/nom d'utilisateur bien connu qu'il essaie de pirater. Et si quelqu'un est une cible directe, son nom d'utilisateur/e-mail est probablement déjà connu.

De nombreuses personnes utilisent la même adresse e-mail et/ou nom d'utilisateur sur tous les sites Web. Donc, fondamentalement, tout administrateur de l'un de ces sites Web dispose déjà de ces informations sensibles. Personne ne semble avoir de problème avec cela, car la force réside dans le mot de passe, pas le nom d'utilisateur.

5
Assaf Lavie

Si vous êtes préoccupé par des problèmes de sécurité, vous ne devez pas faire la distinction entre le mauvais nom d'utilisateur et le mauvais mot de passe.

Cela dit, si vous aviez deux champs dans autre chose qu'une page de connexion et que l'un d'entre eux était incorrect, il serait inutile que le message d'erreur indique: "L'un de ces deux champs est incorrect mais je ne vous dirai pas lequel une." Bien que le nom d'utilisateur et le mot de passe doivent être validés en tant que paire, le mot de passe est beaucoup plus susceptible d'être faux que le nom d'utilisateur car le champ du mot de passe est généralement configuré de sorte que vous ne pouvez pas voir ce que vous tapez.

5
user246

tilisez les deux: la première option pour les premiers essais et après 5 tentatives infructueuses consécutives, passez à la deuxième option.

De cette façon, vous gardez la convivialité pour la majorité des utilisateurs, mais cela rend le travail du pirate beaucoup plus difficile à accomplir: après 5 échecs, il devra réinitialiser ses cookies et changer son adresse IP ou trouver les informations d'identification correctes en seulement 5 tentatives (très peu probable). À ce stade, la plupart des "attaquants" abandonneraient et s'il est déterminé et suffisamment habile, il rejettera probablement la stratégie de force brute de toute façon.

5
Knu

Je suis d'accord avec JohnGB:

Je suis souvent frustré par les sites qui me disent "le nom d'utilisateur ou le mot de passe est incorrect". Mais la réponse de JohnGB ci-dessus est logique.

Juste pour ajouter une de mes principales frustrations vient du fait que le courrier électronique et le nom d'utilisateur ne sont souvent pas différenciés. Par exemple, un site que je demande pour mon e-mail ou mon nom d'utilisateur, mais qui ouvre soudainement beaucoup plus d'options. Parfois, ils changent également la terminologie tout au long du processus d'inscription!

Soyez précis et cohérent. si vous demandez un e-mail comme identifiant, assurez-vous de toujours vous y référer en tant qu'e-mail! et vice versa.

3
Sheff

Nous avons eu une discussion similaire sur la meilleure option à utiliser sur notre site. En fin de compte, cela dépend de la nature de votre site et du niveau de sécurité que vous souhaitez offrir à vos utilisateurs. Nous gérons un chantier et, finalement, notre appel était de suivre l'approche Amazon, car nous voulions une couche de sécurité supplémentaire pour nos utilisateurs.

1
dg3a