web-dev-qa-db-fra.com

Convivialité et sécurité pour l'accès des utilisateurs et la gestion des mots de passe dans une application Web?

Je cherche à mettre en place un site Web destiné aux utilisateurs ordinaires qui traitera des données personnelles que je ne veux pas être compromises. Comment rendre le site sécurisé mais également utilisable?

Il semble que la plupart des sites utilisent un identifiant d'utilisateur (l'adresse e-mail semble la meilleure) et un mot de passe, ce qui est assez bien compris.

Certains sites bancaires vont au-delà de cela en ayant un PIN ou des questions de sécurité suite aux identifiants standard ou en remplaçant le mot de passe. Je serais intéressé d'entendre parler de toutes les alternatives qui ont réussi à cet égard .

J'ai également entendu parler de la possibilité pour les utilisateurs de choisir leur propre programme de couleurs ou de rechercher et ressentir un site une fois qu'ils ont été identifiés, ce qui rend plus difficile l'hameçonnage des détails du compte. Quelqu'un connaît-il des sites qui l'utilisent et comment cela fonctionne-t-il?

La véritable faiblesse de la plupart des systèmes me semble être la fonction de réinitialisation du mot de passe. Parce que les utilisateurs oublient leurs mots de passe tout le temps, nous devons avoir quelque chose pour les aider ici, mais il semble vraiment difficile de trouver un équilibre entre utile et horriblement précaire. Encore une fois, l'approche des questions de sécurité des utilisateurs semble être largement utilisée ici, mais les deux côtés que j'ai rencontrés ont soit posé une question que l'utilisateur définit et fournit une réponse, soit posé des questions immuables sur l'utilisateur.

Avec une question fournie par l'utilisateur, je ne leur fais pas confiance pour ne pas faire la question "qu'est-ce que 1 + 1", peu importe à quel point vous essayez de leur dire que c'est très important.

Avec des questions immuables - et si vous demandez aux utilisateurs des opinions sur des choses plutôt que des faits simples, ils sont plus susceptibles de changer - ils ont tendance à devenir le genre de chose (prénom des parents, premier animal de compagnie) qui est en fait assez facile à trouver si vous ciblez un utilisateur pour une attaque.

Je me rends compte qu'il y aura toujours un compromis ici entre ce qui est sécurisé et ce qui est facile à utiliser, mais il doit être possible de faire mieux que la plupart des sites aujourd'hui. Pouvez-vous suggérer des approches moins conventionnelles mais fiables pour la sécurité des comptes d'utilisateurs? J'ai entendu parler de grilles d'images, de captchas personnalisés, etc. - en avez-vous l'expérience en pratique? Y a-t-il des sites qui gèrent cela particulièrement bien et si montrent comment/pourquoi fonctionnent-ils?

10
glenatron

Bonne question.

Version courte

Il existe plusieurs options allant au-delà du nom d'utilisateur/e-mail/mot de passe comme le font la plupart des sites. Vous ne pouvez pas résoudre le problème de sécurité ultime, mais vous pouvez éduquer. Il existe des alternatives aux captchas. Sécurité vs facilité d'utilisation est un débat sain et sans fin.

Options de sécurité supplémentaires lors de la connexion

  • Yahoo! utilise le concept " sign in seal ", où vous pouvez choisir du texte ou une image, et cette personnalisation sera stockée dans un cookie et affichée sur la page de connexion lorsque vous reviendrez. L'idée ici est qu'elle aide à prévenir les attaques de phishing: au lieu d'expliquer les détails techniques du phishing aux utilisateurs et de s'attendre à ce qu'ils se souviennent de choses comme "assurez-vous que l'URL commence par https://www.yahoo.com ", vous dites simplement à l'utilisateur de rechercher son texte ou image personnalisé sur la page. Si ce n'est pas le cas, vous n'êtes pas sur le bon site, alors ne fournissez pas vos informations de connexion.

  • World of Warcraft utilise Blizzard Authenticator , qui est soit un appareil que vous pouvez commander et vous avoir expédié, soit une application iPhone/Android. Les deux génèrent un code unique lié à votre compte chaque minute. Lorsque vous vous connectez, vous devez fournir votre adresse e-mail enregistrée Battle.net, le mot de passe de votre compte et ce code d'authentification Blizzard. Bien qu'il s'agisse d'un jeu, World of Warcraft est un continent de phishing à part entière, cette approche s'est avérée extrêmement efficace pour réduire le nombre de comptes piratés par le phishing (car même si vous piratez le compte de messagerie de quelqu'un et récupérez ou modifiez son mot de passe World of Warcraft , vous ne pouvez pas vous connecter sauf si vous disposez de ce code d'authentification spécifique synchronisé). Il convient de noter que l'Authenticator est théoriquement piratable, mais il faut beaucoup plus de travail pour le faire.

  • myOpenID utilise un sceau de connexion similaire à Yahoo! appelé "votre icône personnelle". Étant donné qu'OpenID a des implications de sécurité supplémentaires (par exemple, si vous accédez à mon OpenID, vous avez désormais potentiellement accès à tous les sites que j'utilise avec cet OpenID), toutes les options vers une protection accrue aident beaucoup. Je ne pense pas que la plupart des utilisateurs non techniques ont des comptes OpenID avec des fournisseurs OpenID, cependant, cela pourrait donc être moins important. Encore bon sur JanRain pour avoir fait un effort supplémentaire.

Que faire lorsque les utilisateurs fournissent des questions et réponses de sécurité évidentes

C'est un problème que vous ne pouvez pas résoudre et ce n'est pas vraiment votre responsabilité. Ce sur quoi vous devez vous concentrer, c'est promouvoir le bon comportement de vos utilisateurs en les informant sur ce à quoi ils doivent prêter attention. Selon le type de base d'utilisateurs dont vous disposez, vous pouvez être plus ou moins agressif à ce sujet - par exemple, Yahoo! et Blizzard sont très agressifs et mettent également en œuvre une assistance à la sécurité plus proactive, comme mentionné ci-dessus.

Certaines choses que vous pouvez faire:

  • Rappelez aux utilisateurs d'utiliser un mot de passe unique composé non seulement de caractères alphanumériques
  • Expliquez que les mots de passe doivent être créés à partir de mots inexistants et expliquez comment créer un mot de passe mémorable qui correspond à ce moule
  • Utilisez une copie claire pendant le flux où les utilisateurs créent une question de réinitialisation du mot de passe de sécurité et soulignez l'importance de poser des questions non triviales auxquelles d'autres personnes ne connaîtront pas la réponse
  • Fournissez des exemples de questions que les gens pourraient utiliser ( ne le faites pas fournissez des exemples comme "nom de jeune fille de la mère", qui est facilement trouvé via Facebook ces jours-ci)
  • Écrivez un FAQ fournissant des conseils sur la façon de sécuriser votre compte. Étant donné que le webmail est un trou de sécurité souvent utilisé, fournissez des conseils de base sur la sécurisation de votre compte de messagerie et comment surveiller les tentatives de phishing.

Soyez un propriétaire de site Web responsable. Je le compare aux gares qui ont des panneaux indiquant "attention aux pickpockets" - il est de votre responsabilité en tant qu'individu de ne pas avoir votre portefeuille bien en vue et de vous plaindre quand il est volé. Mais c'est sympa de la direction de la station de rappeler aux gens de garder les choses à l'esprit. Le problème sur le Web est que de nombreuses personnes ne savent pas quoi rechercher ni comment identifier les menaces. Nous pouvons vous aider en éduquant constamment et de manière cohérente toutes les personnes avec lesquelles nous entrons en contact.

Captchas et alternatives

Les captchas existent pour deux raisons: premièrement, pour empêcher votre site d'obtenir DDOSed et deux, pour empêcher les pirates d'exécuter des attaques par dictionnaire. Mais l'inconvénient est que, dans la plupart des cas, ils sont très hostiles et complètement pas " Don't Make Me Think ".

Si vous souhaitez empêcher, ou au moins dissuader, les attaques par dictionnaire, pensez à ajouter un minuteur à l'écran de connexion qui augmente à chaque tentative (après un certain nombre). La plupart des utilisateurs entreront après, disons, 5 tentatives, et pas plus que cela n'est un comportement douteux. Rendre les attaques par dictionnaire ennuyeuses à exécuter en causant des problèmes aux contrevenants, pas aux utilisateurs réguliers.

Sécurité vs facilité d'utilisation

Jakob Nielsen a fait sensation l'année dernière quand il a écrit que les champs de mot de passe présentaient un problème d'utilisation et devrait cesser de masquer leur saisie . Il a fait valoir que le masquage de l'entrée empêche uniquement les fuites de sécurité lorsque quelqu'un se tient directement derrière vous, et ce n'est pas le cas 99% du temps, alors pourquoi rendre les choses plus difficiles à utiliser uniquement pour un boîtier Edge? En tant qu'expert en ergonomie, il est difficile de discuter avec lui. Et l'expert en sécurité Bruce Schneier a même d'accord avec lui!

La sécurité contre la facilité d'utilisation est donc un problème controversé qui ne peut pas vraiment être résolu. Et c'est un argument sain: si les choses oscillaient trop dans les deux sens, ce ne serait pas bon pour les utilisateurs finaux. En tant que concepteur d'interface utilisateur, il est important de reconnaître les arguments des experts en sécurité et de les prendre en compte lors de la conception de l'expérience de votre utilisateur.

9
Rahul

En fait, avec la plupart des fournisseurs proposant des API de connexion (généralement basées sur Open Auth), vous n'avez même pas besoin de traiter les problèmes de connexion/d'authentification des utilisateurs. Demandez simplement à vos utilisateurs de se connecter avec Facebook, Google, Yahoo, Twitter, etc ... Je pense que Google, Microsoft, Yahoo, et. Al. fera un meilleur travail de sécurisation des identifiants de connexion et de traitement des réinitialisations de mot de passe que moi. C'est vraiment le meilleur cas pour vos utilisateurs, car ils n'ont pas besoin de se souvenir d'un nouvel ensemble d'informations d'identification et, dans la plupart des cas, s'ils sont déjà connectés à leur messagerie, ils ne reviendront pas en entrant le mot de passe. C'est une connexion parfaite en un clic (sans saisie).

Il y a deux petits trucs pour faire ce travail. (1) Vous devez prendre en charge un nombre relativement important de fournisseurs de connexion pour vous assurer de capturer tous vos utilisateurs sans les gêner. (2) Vous devez prendre en charge et encourager la liaison de compte afin que les utilisateurs puissent ajouter plusieurs fournisseurs de connexion à leur compte sur votre site, car les fournisseurs peuvent (et souvent sans avertissement) modifier leur API ou descendre pour la maintenance en bloquant efficacement ces utilisateurs. de votre site.

Du côté positif, vous pouvez généralement récupérer les paramètres utilisateur directement auprès du fournisseur afin que l'utilisateur n'ait pas à entrer des informations telles que l'adresse e-mail, le nom, le téléphone, etc.

1
Jonathan

Pour être honnête, en tant que programmeur, je n'aime pas vraiment les étapes de sécurité des questions/réponses personnelles car les réponses peuvent être entrées incorrectement d'un point de vue strictement programmatique. Que se passe-t-il si leur réponse était un nom, mais ils ne se souviennent pas s'ils ont mis le nom entier ou juste leur nom court ou juste leur prénom, ou bien ils manquent une apostrophe et ne s'en rendent pas compte.

Les captchas (de différentes sortes) nécessitent en revanche une réponse en noir et blanc. C'est valide ou non. Cela dit, la lisibilité du captcha pose parfois des problèmes aux utilisateurs. La plupart sont lisibles, mais certains ne sont que des balivernes.

Je pense que la méthode d'exiger une vérification par e-mail lors de la réinitialisation du mot de passe m'a toujours semblé assez sûre, car elle nécessite clairement que je connaisse mes informations de connexion pour un système second (mon compte de messagerie) pour accéder le lien retour vers le site pour demander un nouveau mot de passe.

0
Nick Bedford