web-dev-qa-db-fra.com

Comment prouver que le système d'authentification fonctionne et que le client utilise un mauvais mot de passe?

Parfois (mais rarement), certains de nos utilisateurs disent que leur mot de passe ne fonctionne pas: ils disent qu'ils ont tapé le bon mot de passe mais ont reçu le message 'mauvais mot de passe'.

Nous leur disons d'utiliser la fonction réinitialiser le mot de passe, ce qu'ils font, mais ils conservent le sentiment que le système d'authentification ne fonctionne parfois pas.

Nous supposons que leur mot de passe n'est pas ce dont ils se souviennent, mais comme nous ne le stockons pas en texte brut, avons-nous un moyen de prouver que c'est le cas?

À certaines occasions, nous avons pu leur montrer qu'à une certaine date, ils avaient changé de mot de passe, puis l'avaient oublié, et ils étaient satisfaits. Mais ce n'est pas toujours le cas.

72
Mario Trucco

Il n'y a pas de moyen très rapide de le prouver car le hachage est conçu pour ne pas être réversible .

Vous pouvez prendre leur mot de passe revendiqué et générer manuellement le hachage comme @ TechTreeDev suggéré . Vous devez utiliser un hachage salé (c'est-à-dire BCrypt), alors assurez-vous d'utiliser le même sel.

  • Si le hachage généré manuellement correspond, alors vous avez prouvé un problème dans le code de connexion.

  • Plus probablement, le hachage généré sera différent, alors vous avez exclu les problèmes de code de connexion , mais il y a toujours être un problème avec la configuration du mot de passe , ou une erreur dans votre génération manuelle.

C'est à peu près l'étendue de ce que vous pouvez faire pour vérifier le mot de passe d'une seule personne. Au-delà de cela, nous entrons dans les tests du système.

  • Si vous suspectez un cas Edge aléatoire intermittent/aléatoire, vous pouvez créer un script de test de singe pour configurer des mots de passe, puis les essayer. Cette approche est probablement exagérée cependant.

  • La meilleure chose est de revoir votre code de connexion et tous les points qui réinitialisent le mot de passe . Le code doit être aussi court et concis que possible. D'après mon expérience, la meilleure façon d'exclure les problèmes de cas Edge est la révision du code, car ces cas Edge ne sont souvent pas couverts par les tests manuels.

Quelques éléments à rechercher spécifiquement:

  • Assurez-vous que le paramètre maxlength est cohérent (ou mieux encore, absent) sur n'importe quel mot de passe <input>s. Vous recherchez la cohérence entre la configuration du mot de passe et le formulaire de connexion.

  • Assurez-vous qu'il n'y a pas de troncature côté serveur .

  • Assurez-vous que le codage est cohérent. Si un caractère non ASCII est utilisé dans le mot de passe, le formulaire de configuration du mot de passe et les formulaires de connexion doivent se comporter exactement de la même manière.

  • De plus, ne supprimez pas automatiquement les caractères comme les espaces ou les caractères non ASCII du mot de passe. C'est le genre de chose que vous pouvez facilement attraper avec une révision de code si votre code est concis.

Enfin quelques conseils humains:

  • Vérifiez qu'ils utilisent d'abord le nom d'utilisateur correct .

  • Vérifiez que le paramètre de verrouillage des majuscules est correct.

  • Fournissez au support client un journal de chaque date/heure de connexion ou de réinitialisation du mot de passe. S'il y a eu au moins une connexion depuis la dernière réinitialisation, alors ils savent que le système a fonctionné correctement.

    Tant que le code de connexion est inchangé et que le hachage est inchangé depuis le dernier succès, vous pouvez être raisonnablement certain que le problème doit être un mot de passe mal saisi.

  • Passez en revue l'UX de l'erreur de mot de passe incorrect , fournissant à l'utilisateur quelques conseils simples et une explication faisant autorité des possibilités. Cela peut réduire les appels au service client.

  • Il peut être utile de notifier par courrier électronique le client lorsqu'un mot de passe est réinitialisé pour le lui rappeler. (ou autre membre de la famille en cas de comptes partagés)

85
Bryan Field

Il y a une façon de savoir avec certitude, et c'est de calculer le hachage de ce que l'utilisateur a entré, en utilisant le même sel, et de le comparer avec ce que vous avez. Cependant, c'est ce que le processus de connexion fait déjà et l'utilisateur ne le croit pas. Pourquoi devraient-ils le croire quand vous le faites pour eux?


Au lieu de cela, vous pouvez faire ce que j'ai vu beaucoup récemment, dans Windows 10 par exemple, mais aussi sur des sites Web:

Donnez à l'utilisateur un moyen de vérifier ce qu'il a entré.

Bien sûr, lors de la connexion, les caractères doivent être représentés sous forme de points ou d'autres caractères, afin que les espions ne puissent pas voir le mot de passe en regardant par-dessus l'épaule de l'utilisateur.

Mais tant qu'il est dans le champ de saisie, il n'a pas encore été chiffré ou haché. Fournissez donc un bouton qui transforme ces points en caractères réels.
De cette façon, après avoir entré le mauvais mot de passe, ils peuvent le saisir à nouveau et voir ce qu'ils viennent de saisir. Ou ils peuvent vérifier avant de se connecter.

CapsLocks oubliés, quarts de travail suspendus, fautes de frappe; ils peuvent tous être détectés par l'utilisateur de cette façon.

25
SQB

Pour améliorer votre expérience utilisateur, vous devez d'abord ajouter une interface utilisateur pour informer les utilisateurs des conditions suivantes:

  • Verrouillage des majuscules activé
  • Avertissement s'il y a des espaces de fin dans le nom d'utilisateur
  • Avertissement s'il y a des espaces blancs à la fin dans le mot de passe
  • empêcher l'utilisation d'espaces dans les e-mails (si vous utilisez l'e-mail au lieu du nom d'utilisateur)
  • empêcher l'utilisation et supprimer automatiquement les nouvelles lignes (il existe plusieurs nouvelles variantes de ligne)
  • empêcher l'utilisation et supprimer automatiquement les caractères de contrôle
  • si vous utilisez Javascript, certains navigateurs l'ont désactivé, vous devez donc déplacer ces étapes côté serveur.

De plus, lorsque le mot de passe inséré est incorrect, affichez le message suivant:

Le mot de passe ou le nom d'utilisateur/mail est incorrect, veuillez type en faisant attention aux lettres minuscules ou majuscules et à tous les numéros de symboles, ils doivent correspondre parfaitement. Évitez de faire du copier-coller, car la copie de texte peut parfois ajouter des espaces blancs et/ou des retours à la ligne indésirables.

Gardez à l'esprit que vos utilisateurs peuvent avoir raison! J'ai eu une fois un vieux téléphone qui ne me permettait pas de me connecter à une page Web, je ne sais pas si c'était un problème d'encodage de texte mais mon mot de passe était alphanumérique et fonctionnait parfaitement sur un PC.

6
CoffeDeveloper

La réponse acceptée en couvre vraiment la majeure partie. Mais en supposant que j'ai essayé toutes les suggestions là-bas et que je ne pouvais toujours pas trouver le problème, j'essayerais alors de détecter l'erreur lorsqu'elle se produit. Pour ce faire, vous pouvez ajouter du code qui a enregistré le mot de passe en clair reçu si un utilisateur n'a pas réussi à se connecter deux fois de suite (afin de filtrer tous les utilisateurs qui viennent de commettre une erreur stupide et de la corriger au deuxième essai).

Afin de ne pas affaiblir la sécurité de votre système, vous ne pouvez activer la journalisation du mot de passe que lorsqu'un utilisateur du téléphone a effectivement rencontré des problèmes de connexion, et ne connecter que son mot de passe, avec son consentement.

L'enregistrement du mot de passe réel que voit votre application présente l'avantage de voir exactement ce que voit votre application. Après quelques appels d'utilisateurs désespérés, vous pouvez commencer à détecter un motif dans leurs mots de passe (par exemple, espace de fin, caractères spéciaux, etc.) qui a signalé un problème dans votre code de connexion, ou vous pouvez voir qu'ils signifiait pour taper "mysweetheart" mais en tapant "myseetheart" à la place, ce qui signifierait que les problèmes de connexion étaient très probablement dus à des erreurs utilisateur.

3
Out of Band

En rencontrant quatre systèmes d'authentification différents avec cette propriété réelle, il est assez facile de vérifier dans chaque cas.

Cas n ° 1: le système échoue de manière aléatoire. En cas d'échec, le compteur de connexion incorrect n'est pas incrémenté. (Je n'ai pas pu inspecter l'intérieur, mais je suis sûr que ce qui se passe, c'est qu'il perd parfois la connexion avec un autre serveur et signale simplement un mot de passe incorrect lorsque cela se produit.)

Cas n ° 2: le système a explosé lorsque j'ai mis une apostrophe dans mon mot de passe. La démonstration que le champ de mot de passe était soumis à une injection SQL était triviale.

Cas n ° 3: un mot de passe valide a été rejeté par un filtre de caractères sur l'écran de connexion que l'écran de mot de passe n'avait pas. C'était aussi trivial pour démontrer le problème.

Cas n ° 4: le système ne me permettait pas de me connecter car il interprétait at-sign comme une ligne d'arrêt. Booo. La connexion par telnet au port FTP a prouvé que j'avais le bon mot de passe.

1
Joshua

Je ne pense pas que l'exécution manuelle des étapes de hachage de mot de passe serait la solution. Si vous avez détecté qu'il échoue, vous pouvez le faire à faible niveau pour déboguer, mais vos clients l'oublieront presque immédiatement.

Ici, le problème est qu'ils utilisent un mauvais mot de passe, soit parce qu'ils l'ont mal saisi, soit parce qu'ils pensent vraiment qu'ils en ont utilisé un autre que celui qu'ils ont utilisé.

Pour exclure le premier cas, faites-leur écrire le mot de passe souhaité dans un éditeur de texte (par exemple le bloc-notes), coupez-le dans le presse-papiers et collez-le dans le champ du mot de passe. Le mot de passe est montré au client pendant le processus, ce qui supprime les cas où une mauvaise lettre est enfoncée, le verrouillage des majuscules a été défini… (bien sûr, nous nous attendons à ce qu'ils le fassent à un moment où personne d'autre ne regarde leur écran )

Le deuxième cas est plus difficile, car nous ne voulons pas encourager les clients à conserver un fichier texte avec leurs mots de passe. Idéalement, vous convaincrez vos clients d'utiliser un gestionnaire de mots de passe comme KeePass. Ensuite, si le mot de passe - celui qui fonctionnait auparavant - est correctement copié depuis le gestionnaire de mots de passe, vous pouvez être certain qu'il s'agit bien du bon mot de passe.

En dehors de cela, qui nécessite vraiment un changement d'avis de vos clients, vous pouvez demander à vos clients de:

  • crée un nouveau mot de passe
  • changer leur mot de passe en le collant
  • essayez de vous connecter avec le même mot de passe qu'ils ont dans le presse-papiers

autant de fois qu'ils le souhaitent, afin de tenter de le reproduire.

1
Ángel

En supposant que vous vous connectez chaque fois qu'un utilisateur se connecte, vous pourrez peut-être montrer qu'il a pu se connecter depuis la dernière modification de son mot de passe.Cela serait au moins suffisant pour éliminer certains problèmes potentiels.

1
Nick

Je poste une deuxième réponse à laquelle j'ai pensé hier, mais je n'étais pas sûr qu'elle était souhaitable.

Vous pouvez créer un journal temporaire des mots de passe définis/réinitialisés et tentés sous une forme cryptée. Les experts en sécurité (dont moi) frémiraient à l'idée de crypter (au lieu de hacher) les mots de passe (ou même des tentatives de mot de passe incorrectes), donc je suggérerais trois précautions si vous décidez que vous devez commencer à enregistrer ces informations.

  1. Soumettez les informations à un ordinateur séparé/isolé donc si le serveur principal est compromis, le journal des mots de passe est toujours sûr.
  2. Utilisez cryptage à clé publique (asymétrique) pour les informations enregistrées. La clé privée (déchiffrement) n'est stockée que dans un environnement isolé pour que le développeur puisse examiner les données enregistrées.
  3. Planifiez une tâche (ou codez-la) de manière à ce que le journal temporaire soit désactivé à une date particulière ou lorsqu'un nombre suffisant de tests ont réussi.
0
Bryan Field

Vous pouvez stocker les derniers mots de passe (hachés) de chaque utilisateur dans votre base de données. Si le mot de passe saisi ne correspond pas au mot de passe actuel, comparez-le aux anciens. S'il y a une correspondance, présentez un message "Vous avez entré un ancien mot de passe - essayez à nouveau" ou un code d'erreur à cet effet (donc quand ils vous contactent, vous pouvez demander "Voyez-vous le code d'erreur 47? Cela signifie que vous avez utilisé un ancien mot de passe. ")

De cette façon, vous pouvez être certain que le système de connexion fonctionne car il a effectué au moins quelques recherches de mot de passe et l'utilisateur reçoit des commentaires indiquant qu'il a oublié son nouveau mot de passe.

0
b04ty