web-dev-qa-db-fra.com

Comment puis-je dire au mieux à un utilisateur que son compte sera verrouillé s'il saisit trop souvent les mauvaises informations d'identification?

Nous allons ajouter une couche de sécurité supplémentaire à notre produit en verrouillant les comptes d'utilisateurs pendant une courte période (configurable dans le produit, mais probablement 5 à 10 minutes) lorsqu'un utilisateur a tenté de se connecter plusieurs fois sans succès ( également configurable, mais le paramètre par défaut sera probablement environ 5 fois).

J'essaie maintenant de trouver la meilleure façon de présenter cela à l'utilisateur.

Option A: compte à rebours du nombre de tentatives restantes chaque fois que les utilisateurs tentent de se connecter sans succès. "Il vous reste 3 tentatives de connexion", "Il vous reste 2 tentatives de connexion", etc. Le problème avec cette approche, à mon avis, est qu'elle ajoute un composant inutile et peut-être stressant au processus de connexion. D'un autre côté, les gens seront probablement moins bâclés lors de la saisie de leurs mots de passe s'ils sont informés immédiatement après la première erreur qu'ils n'ont que tant de tentatives avant que le compte ne soit verrouillé.

Option B: Présentez uniquement un avertissement avant la dernière tentative. Par exemple. "Pour des raisons de sécurité, votre compte d'utilisateur sera verrouillé pendant X minutes si vous saisissez à nouveau les informations d'identification incorrectes." Cette approche évite les informations inutiles jusqu'à ce que l'utilisateur en ait réellement besoin et je penche vers cette option.

Quelles sont vos pensées? Y a-t-il une autre meilleure façon?

9
Henrik Söderlund

TL; DR - La plupart du temps, j'ai vu des gens ajouter cette fonctionnalité, c'était un pur théâtre de sécurité. Cela n'a pas aidé l'utilisateur et ne rend pas le site plus sûr. A éviter si possible.

La version longue ...

Personnellement - je commencerais à me demander si c'était vraiment une bonne fonctionnalité à ajouter. Est-ce que cela rend le système plus sûr? Existe-t-il de meilleurs moyens de le sécuriser?

Ici, je suppose que c'est une application Web. Je suppose que la connexion est un nom d'utilisateur/e-mail et un mot de passe purs. Une partie de cela ne s'applique pas si ces deux hypothèses sont incorrectes.

  • Les gens essaient-ils vraiment de casser le système? S'agit-il d'un problème réel - ou d'un problème que les gens pensez va se produire/se produire? Si ce dernier alors je me battrais très fort pour qu'il y ait des preuves que c'était un problème avant d'ajouter la fonctionnalité. Une fois que l'endroit où j'ai travaillé était sûr ils recevaient des attaques de piratage en raison d'un grand nombre de tentatives de mot de passe échouées. Après enquête, il s'est avéré que de nombreux utilisateurs oubliaient leurs mots de passe ... Un autre client a découvert qu'il s'agissait d'un robot de spam qui publiait des adresses e-mail et des URL dans les boîtes de connexion. Soyez d'abord sûr. Le verrouillage des utilisateurs ajoute peu de sécurité, augmente les risques (voir ci-dessous) et rend le travail des utilisateurs plus stressant.

  • Si vous ajoutez un verrouillage de compte, vous avez immédiatement rendu le site ouvert à une attaque par déni de service. N'oubliez pas que les attaques de craquage les plus graves sont en masse les attaques ciblant le site en général, et non les attaques ciblant des individus. Ils essaieront des milliers/millions de combinaisons nom d'utilisateur/mot de passe. Soudain, des milliers d'utilisateurs sont bloqués sur leurs comptes. Cela provoque un effet roll-on qui surcharge votre centre d'assistance avec des appels/e-mails. Cela fait tomber votre soutien. Cela amène les gens à râler et à gémir sur la qualité du service. Bienvenue en enfer PR. J'ai vu cela se produire deux fois maintenant :-)

  • Les lock-out n'aident pas dans la plupart des cas. Étant donné que les tentatives de craquage sont principalement des attaques de masse, les crackers s'en moquent. Ils vont simplement passer au compte suivant et revenir N minutes plus tard et continuer.

Si cela se produit, il existe de bien meilleures techniques pour le résoudre qu'un simple compteur de tentatives de connexion infructueuses dépassé. Par exemple, une combinaison de tous les éléments suivants:

  • Sur la Nième tentative, commencez à introduire une technique d'authentification supplémentaire. Un anniversaire, un CAPTCHA (une des rares fois, je pense que c'est une option raisonnable :-), répondre à une question de sécurité, etc. En ajoutant une troisième information, vous compliquez les attaques de crack.

  • Dirigez les utilisateurs vers le mécanisme de réinitialisation du mot de passe afin qu'ils disposent d'un mécanisme automatisé pour récupérer le mot de passe qu'ils ont évidemment oublié.

  • Plutôt que de verrouiller les gens, commencez à introduire des pauses dans le processus de connexion. Rendez les pauses initiales courtes, prolongez les pauses après plusieurs tentatives. La limitation réduit considérablement le risque car elle oblige les robots de piratage à réduire le nombre de tentatives à l'échelle humaine, et cela ne suffit pas pour deviner les mots de passe au hasard.

14
adrianh

La pratique de sécurité standard consiste à ne rien divulguer sur le processus en cours. En effet, cela facilite les tentatives d'accès non autorisées au système.

Cela peut ne pas être une considération particulièrement nécessaire pour un message comme "Il vous reste deux tentatives", mais ne dites jamais à l'utilisateur pendant combien de temps le compte sera verrouillé. Il donne trop d'informations sur votre modèle de sécurité.

De même, ne donnez jamais d'indication sur le jeton incorrect: si le nom d'utilisateur n'est pas reconnu ou si le mot de passe n'est pas correct. Un message disant que le nom d'utilisateur est erroné indique à un cracker * de ne pas le réutiliser; un message indiquant que le mot de passe est incorrect lui indique que le nom d'utilisateur est valide et qu'il n'a qu'à essayer les mots de passe. Donnez toujours un message générique de "connexion invalide".

Rien de tout cela n'empêche d'offrir de l'aide pour récupérer un mot de passe perdu.

Au lieu de donner des indices au cours du processus, ces éléments doivent être communiqués aux nouveaux utilisateurs lors de leur formation initiale et (s'il s'agit d'un nouveau régime de sécurité introduit pour les utilisateurs existants) soit directement aux utilisateurs dans un mailing ou comme message système une fois qu'ils '' reconnecté.


* Oui, cracker, pas hacker. Eric S Raymond sur la différence

5
Andrew Leach

Je dirais que l'option B semble la solution la plus logique pour moi; comme vous l'avez dit, l'option A ajoute simplement un élément stressant au processus de connexion et me dit combien de tentatives il me reste, ne me fera pas du tout me souvenir de mon mot de passe plus rapidement.

J'ai une suggestion pour l'option B:

Je ne sais pas si je devrais m'occuper de la copie, mais si c'est le cas, je la rendrais beaucoup plus courte et précise. Et pourquoi ne pas orienter l'utilisateur vers une solution si possible? Donc, ne dites pas seulement qu'il reste une tentative, aidez également l'utilisateur à récupérer son mot de passe s'il l'a vraiment perdu.

Par exemple:

"Pour des raisons de sécurité, il vous reste 1 tentative. Mot de passe oublié? "

1
Nick van der Wildt

Option C:

Laissez-les faire une erreur sans que rien ne se passe. (qui couvre la situation "Je sais que j'ai fait une erreur de frappe")

Ensuite, sur la deuxième erreur, affichez la séquence de compte à rebours de l'option A.

1
PhillipW