Question:
Mot de passe oublié ou lien de réinitialisation, qui est plus sûr pour envoyer par e-mail?
fwgx
2012-03-24 02:46:13 UTC
view on stackexchange narkive permalink

J'ai initialement publié ceci en réponse ici dans ce fil de discussion, mais je n'ai pas reçu beaucoup de commentaires à ce sujet, et maintenant je suis curieux de savoir ce que les autres pensent être la meilleure approche, ou si elle existe est une différence entre les deux approches.

Le point initial était de savoir s'il était plus sûr d'envoyer un lien de réinitialisation de mot de passe lorsqu'un utilisateur oublie son mot de passe sur un site Web, ou s'il faut envoyer le mot de passe d'origine non chiffré dans un e-mail.

Maintenant, ne pas saler et crypter un mot de passe est mauvais car lorsque la base de données est finalement volée sur le site Web, l'attaquant aura tous les mots de passe clairs comme jour. OK, je comprends.

Mais si nous ignorons la possibilité de vol de la base de données et ne regardons que l'utilisateur oubliant son mot de passe et passant par les "étapes de mot de passe oublié"; est-ce plus, identique ou moins sûr d'envoyer un lien de réinitialisation sur un mot de passe en texte brut dans un e-mail?

Je pense que c'est la même chose. Parce que si un attaquant a accès à votre e-mail par quelque moyen que ce soit (il connaît vos identifiants de messagerie, ou il surveille le trafic quelque part), il a donc accès au mot de passe en texte brut envoyé ou au lien de réinitialisation - même si c'est une durée limitée lien.

L'attaquant pourrait réinitialiser votre mot de passe avant même que vous sachiez que vous avez un e-mail.

Ma réflexion est-elle erronée?

Merci d'avoir posé la question. C'est une question ouverte avec un de mes clients. Je pense toujours qu'annoncer à vos utilisateurs que vous stockez leurs mots de passe sous une forme récupérable (en clair ou crypté) engendre une responsabilité pour l'entreprise, car l'utilisateur a la preuve que toute personne de l'entreprise aurait (au moins) pu compromettre son compte avec une connexion valide.
J'aimerais vraiment connaître l'opinion des gens sur l'envoi d'un texte brut, fraîchement généré, à utiliser un mot de passe, au lieu d'un lien de réinitialisation. Une grande organisation vient de perdre mes coordonnées et j'ai dû utiliser la fonction de récupération qui fonctionnait comme ça, ils m'ont envoyé un e-mail avec un mot de passe (6K $ NHw) que je pouvais utiliser pour me connecter, mais la seule option était de définir un nouveau mot de passe. Cela m'a rappelé les échanges de piles "Voici votre mot de passe: assistant`Je plaisante!"
En plus du scénario «base de données volée», toute personne ayant accès à la base de données peut voir ces mots de passe. Cela peut être juste vous, n'importe quel administrateur, n'importe quel développeur ou même n'importe quel employé. Comme de nombreux utilisateurs utilisent le même mot de passe partout, il peut y avoir des scénarios très tentants et quelqu'un pourrait devenir faible et utiliser l'un des mots de passe. Vous ne voulez vraiment pas être responsable de cela.
L'application ne doit pas connaître le mot de passe !!!
Sept réponses:
Tony Meyer
2012-03-24 03:10:58 UTC
view on stackexchange narkive permalink

Il est beaucoup plus simple d'accéder au corpus d'e-mails existant que d'accéder au flux entrant. Par exemple, obtenir quelques minutes d'accès au système d'une personne permet une recherche facile dans son courrier électronique. Donc, pour le cas où un attaquant a accès à l'ancien courrier, mais pas au flux des nouveaux messages entrants:

Vous comptez sur l'utilisateur soit changer son mot de passe après l'avoir reçu (peu probable, étant donné que vous leur avez dit de quoi il s'agit), ou en supprimant (définitivement, pas d'archivage ou de déplacement dans un dossier «corbeille», également peu probable) le message de rappel.

Si cela ne se produit pas, alors si j'obtiens l'accès au compte de messagerie de l'utilisateur quelque temps plus tard, alors un lien de réinitialisation (dans le temps / utilisation limitée, peut-être même limité de sorte que l'attaquant ne puisse pas l'utiliser facilement) ne me servira à rien, mais avoir le ( le mot de passe est certainement toujours valide.

De plus, en m'envoyant le mot de passe en texte brut, vous démontrez que vous l'avez stocké quelque part accessible. Dans la plupart des cas, cela n'est pas nécessaire, car vous n'avez pas besoin de crypter le mot de passe (et sel / poivre), il vous suffit de le hacher. S'il est chiffré, toute personne ayant accès à la base de données et à la clé de déchiffrement (par exemple, probablement la plupart du personnel, ou toute personne qui vole le code avec la base de données) peut obtenir le mot de passe en texte brut. S'il est haché, vous devrez l'obtenir avant le hachage (par exemple pendant une session de connexion).

De plus, bien que les gens ne le devraient pas, il est très courant d'utiliser le même mot de passe (ou mots de passe très similaires) sur plusieurs sites. Cela signifie qu'au lieu de fournir un moyen d'accéder à un seul compte, vous fournissez un moyen d'accéder à plusieurs.

Dans l'autre cas, où l'attaquant a accès à tous les e-mails entrants (potentiellement même la possibilité de supprimer les e-mails entrants avant que l'utilisateur ne les voit), aucun de ces éléments n'est sécurisé. Le compte de messagerie est à haut risque, car si vous disposez de ce type d'accès, vous pouvez probablement accéder à tous les sites sur lesquels l'utilisateur possède un compte et générer une réinitialisation de mot de passe. Pour éviter cela, vous devez utiliser autre chose que (ou aussi bien que) votre compte de messagerie pour y accéder, comme l'authentification à deux facteurs.

Notez que même dans ce dernier cas, un lien de réinitialisation est toujours supérieur: si l'attaquant change le mot de passe de l'utilisateur via un lien de réinitialisation, alors lorsque l'utilisateur essaiera de se connecter, il découvrira que quelque chose ne va pas (trop tard, mais au moins il le sait). Si vous ne faites que fournir le mot de passe, l'utilisateur n'a aucune idée que l'attaquant a obtenu l'accès en silence.

Juste pour clarifier ce que je pense est l'un des points les plus importants de cette réponse, mais pas tout à fait clairement articulé: les liens de changement de mot de passe qui deviennent inactifs après utilisation peuvent autrement indiquer à un utilisateur légitime qu'un attaquant a accès à votre compte. Le simple fait d'envoyer le mot de passe ne donnera pas cette information.
C'est une réponse bien pensée. Il ne faut vraiment stocker que le hachage du mot de passe, sinon un attaquant n'a besoin que d'une seule clé pour obtenir tous les mots de passe. On ne peut ignorer la possibilité que la base de données soit volée, avec l'injection SQL, un attaquant peut faire des requêtes même s'il n'a pas accès à la base de données elle-même.
mhswende
2012-03-25 01:59:08 UTC
view on stackexchange narkive permalink

Ok, en ignorant le fait que les mots de passe sont stockés en texte brut, et en plongeant directement dans la question:. Le mot de passe est un identifiant qui a une longue validité, tandis qu'un lien de réinitialisation de mot de passe peut être étendu de différentes manières:

  1. Valable uniquement pendant une courte période
  2. Valable uniquement à partir d'une certaine adresse IP
    • De préférence, la même IP à partir de laquelle la demande de mot de passe a été envoyée.
  3. Uniquement valable dans la session utilisateur
    • Lorsque l'utilisateur entre des détails dans le formulaire Web pour demander un nouveau mot de passe, l'utilisateur reçoit un cookie (démarrage d'une session). La validation de l'URL de réinitialisation du mot de passe dépend de quelque chose dans cette session, donc la fonction de validation échouera si la demande est faite sans le cookie.

Il convient également de noter qu'un ancien mot de passe, qui peut ne plus être valide sur votre site, peut encore être sensible pour le client, car les gens réutilisent les mots de passe dans toutes sortes de services.

De cet aspect, mettre des mots de passe dans les boîtes de courriel des gens pourrait être considéré comme un peu impoli.

Tom Newton
2012-03-24 19:11:41 UTC
view on stackexchange narkive permalink

Il vaut la peine d'ajouter que si vous envoyez le mot de passe d'un utilisateur en clair, vous pouvez envoyer un mot de passe qu'ils utilisent également sur d'autres sites - même si vous forcez l'utilisateur à changer le mot de passe sur votre site lors de la prochaine connexion, vous avez fait pas de faveurs du tout.

dr jimbob
2012-03-25 02:36:07 UTC
view on stackexchange narkive permalink

Il est contraire à l'éthique de stocker des mots de passe en texte brut si vous avez le moindre souci pour vos utilisateurs. Vous devriez stocker des hachages salés sécurisés. L'envoi d'un mot de passe en clair peut amener les utilisateurs soucieux de la sécurité à cesser d'utiliser votre service (même si les utilisateurs soucieux de la sécurité ne réutilisent pas les mots de passe; ils n'aiment tout simplement pas prendre en charge des services qui ne sont manifestement pas conscients de la sécurité).

Comment implémenter une réinitialisation de mot de passe; généralement pour un site moyennement sécurisé (par exemple, une carte de crédit), vous exigez qu'ils répondent à certaines questions de sécurité de base (par exemple, le nom de jeune fille de la mère) et vérifient qu'ils ont le contrôle de leur compte de messagerie ou de leur numéro de téléphone, comme une forme d'authentification à deux facteurs. Le lien ne doit être valide que dans une courte période (de quelques heures à quelques jours) et une seule fois (par exemple, comprend un jeton créé au hasard qui expire après la première utilisation et après une période de temps).

Vous notifiez également eux que le mot de passe a été réinitialisé (et même si leur email a été compromis; ils trouveront des preuves d'un attaquant lorsqu'ils ne pourront plus se connecter avec leur ancien mot de passe). L'envoi du mot de passe (sans le changer) signifie que cette attaque peut être effectuée furtivement sans que l'utilisateur ne le sache jamais (si, par exemple, les e-mails ont été supprimés).

paj28
2013-10-13 19:25:13 UTC
view on stackexchange narkive permalink

Il est préférable d'envoyer un lien de réinitialisation du mot de passe.

Certains sites ont le formulaire de mot de passe oublié réinitialiser immédiatement le mot de passe à une valeur aléatoire, et cela est envoyé par e-mail à l'utilisateur. Cela a une faille de déni de service - quelqu'un qui n'est pas le propriétaire du compte peut provoquer la réinitialisation de son mot de passe. Le lien de réinitialisation du mot de passe évite cela, car le mot de passe n'est réinitialisé qu'une fois qu'un utilisateur clique sur le lien - et il doit avoir accès à l'adresse e-mail pour le faire.

Si vous voulez un peu de sécurité contre un attaquant qui a accès au courrier électronique de l'utilisateur, l'approche habituelle consiste également à poser des questions de sécurité. Ce sont des questions comme "Quel était le prénom de votre animal". Et le moment de poser ces questions est après que l'utilisateur a cliqué sur le lien de réinitialisation du mot de passe dans l'e-mail.

Quelques bons conseils ici: https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet

ShadSterling
2014-05-23 21:52:08 UTC
view on stackexchange narkive permalink

Il est préférable d'envoyer un lien de réinitialisation.

En plus des raisons données par @Tony Meyer et @mhswende, la page du lien de réinitialisation peut nécessiter une authentification supplémentaire. De nombreux sites demandent aux utilisateurs de répondre à des «questions de sécurité» exactement dans ce but (l'ancienne norme pré-informatique demande le nom de jeune fille de votre mère). Les sites qui ont votre numéro de téléphone peuvent, sur leur page de réinitialisation de mot de passe, vous demander de saisir un code qu'ils ont envoyé par SMS. Les institutions financières peuvent poser des questions sur d'anciens dossiers financiers (morgtages passés, etc.).

Il n'est pas trivial de proposer un bon mécanisme d'authentification secondaire, mais toute procédure de réinitialisation (ou de récupération) de mot de passe qui ne l'est suffisamment vulnérable pour que je l'appelle négligente.

AbhishekKr
2012-04-19 16:20:45 UTC
view on stackexchange narkive permalink

L'e-mail des mots de passe oubliés signifie que vous stockez le mot de passe dans votre base de données sous forme simple ou avec un cryptage bidirectionnel. Ce n'est pas une pratique de sécurité suggérée.

Vous devez stocker un cryptage unidirectionnel (qui ne peut pas être déchiffré) sous forme de mot de passe à la fin de l'application Web. Ainsi, même si votre application Web ou votre serveur Web est confronté à un niveau de base de données en sécurité, aucun mot de passe utilisateur n'est divulgué en texte brut.

Donc, compte tenu de cette politique, le lien de réinitialisation est l'option appropriée et de gauche de deux approches.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...