Le OWASP Forgot Password Cheat Sheet suggère:
Chaque fois qu'une réinitialisation de mot de passe réussie se produit, la session doit être invalidée et l'utilisateur redirigé vers la page de connexion
Je n'arrive pas à comprendre pourquoi c'est si important. Y a-t-il une base de sécurité pour cette recommandation et si oui, quelle est-elle?
Disons qu'un attaquant a votre mot de passe. Vous vous connectez et le réinitialisez. Si la réinitialisation n'invalide pas toutes les sessions existantes, l'attaquant a toujours accès, tant qu'il ne laisse pas sa session expirer.
La réinitialisation n'a en fait rien réussi dans ce scénario.
Selon ce que fait le site, il pourrait également y avoir des problèmes avec votre connexion avec un mot de passe qui est maintenant obsolète. Disons que votre mot de passe est utilisé pour déverrouiller quelque chose, vous êtes connecté avec "mot de passe1", mais le serveur a maintenant votre mot de passe enregistré comme "mot de passe2", que se passe-t-il? C'est évidemment hypothétique, mais j'espère que cela illustre le point.
Redirection vers l'écran de connexion, je suppose que ce n'est qu'une recommandation. Je ne sais pas pourquoi cela importe où vous envoyez l'utilisateur, mais du point de vue de la convivialité, il est plus logique d'envoyer l'utilisateur à une page de connexion plutôt qu'à la page d'accueil.
Il n'est pas nécessaire de rediriger réellement vers la page de connexion si la gestion de session lors du changement de mot de passe est effectuée en toute sécurité. Autrement dit, tant que tous les identifiants de session en cours sont invalidés et que la session en cours est attachée à un nouvel identifiant de session (généralement émis en tant que jeton dans un cookie d'authentification - le cookie n'est envoyé qu'à la session qui vient de changer le mot de passe), puis là il n'y a aucun risque qu'un attaquant qui est déjà dans le compte ne reste connecté.
La justification de l'article de l'OWASP est expliquée ci-dessous. Il n'y a rien de mal à l'aspect sécurité de celui-ci, mais il y a quelques problèmes d'utilisation.
La fonctionnalité de réinitialisation de mot de passe est souvent utilisée lorsqu'un utilisateur souhaite sécuriser son compte.
En invalidant toutes les sessions existantes lors de la réinitialisation du mot de passe, le système s'assure que seule la personne possédant le nouveau mot de passe peut se connecter.
Supposons, par exemple, qu'un attaquant ayant accédé au compte à l'aide de l'ancien mot de passe soit connecté. La réinitialisation de toutes les sessions déconnectera l'attaquant.
Pourquoi déconnecter l'utilisateur actuel, je vous entends demander?
Supposons que l'attaquant utilise la session de l'utilisateur actuel, par exemple en utilisant une vulnérabilité fixation de session . Cela signifie que l'attaquant a la même session que l'utilisateur réel. La réinitialisation de la session en cours garantira également que personne sur le compte n'est pas censé y avoir accès.
La redirection vers la page de connexion dans votre citation ci-dessus décrit vraiment le fait que vous devez déconnecter l'utilisateur de la session actuelle et de toutes les sessions (mais il n'y a aucun risque de vous empêcher de les déposer dans une nouvelle session avec un nouvel identifiant).
Les autres réponses sont probablement plus correctes du point de vue de netsec, mais je voulais ajouter que vous devez également vous assurer que l'utilisateur est réellement en mesure de se connecter avec son nouveau mot de passe. Cela rend évident si quelque chose ne va pas, comme le navigateur remplissant automatiquement un ancien mot de passe.
Il empêche également les utilisateurs d'utiliser la réinitialisation du mot de passe comme connexion. Sur l'un de mes comptes, il est plus facile de répondre aux questions de sécurité que de se souvenir du mot de passe, car je dois définir un mot de passe unique chaque fois que je le réinitialise et je ne m'en souviens pas.
Il n'y a qu'une seule raison possible sécurité - pour vous envoyer à la page de connexion, car toutes les anciennes sessions peuvent être invalidées et votre session active actuelle vous avez changé le mot de passe de remplacé automatiquement:
Cela rend l'utilisation de la réinitialisation du mot de passe pour la connexion plus lourde, ce qui vous permet de l'utiliser moins souvent et de le protéger ainsi contre les écoutes et les divulgations accidentelles.
Il y a aussi une raison de convivialité pour vous y envoyer: il s'assure que vous pouvez réellement utiliser le nouveau mot de passe, et tout cache de mot de passe dans le navigateur est mis à jour.
Si les utilisateurs sont autorisés à laisser le navigateur stocker leurs mots de passe, rediriger l'utilisateur vers la page de connexion permettra au navigateur de capturer le nouveau mot de passe sur cette page. Sinon, la prochaine fois que l'utilisateur se connectera au navigateur, il remplira "utilement" le champ de mot de passe avec l'ancien mot de passe - une action qui risque de créer de la confusion si l'utilisateur ne se rend pas compte de ce qui se passe.
C'est très simple si l'on tient compte des contre-mesures de sécurité. Cela invalidera en fait toutes vos sessions actives, ainsi que l'appareil de voleur, qui a créé le problème.
lorsque vous vous connectez à nouveau juste après une réinitialisation du mot de passe
a) vous vous souvenez plus probablement du mot de passe 3 secondes plus tard que 3 jours plus tard.
b) votre navigateur peut alors demander à l'utilisateur s'il souhaite mettre à jour son mot de passe enregistré avec le nouveau, puis le navigateur s'en souviendra sur la page de connexion.
En plus de fournir un mécanisme simple pour établir une nouvelle session valide, vérifier que le nouveau mot de passe fonctionne et déconnecter les sessions en cours, il y a aussi l'avantage supplémentaire de demander à votre utilisateur d'entrer le mot de passe une troisième fois, ce qui le rend plus facile à mémoriser.
En plus de bon nombre des autres points soulevés ici, il est avantageux de limiter le mécanisme de création de session à un seul point d'entrée du point de vue de la maintenabilité/du renforcement/de l'audit.
Un utilisateur qui réinitialise son mot de passe dans l'état verrouillé ne doit pas nécessairement être traité comme un utilisateur connecté, même après avoir sauté dans les cerceaux d'identité de récupération que vous avez, sinon vous avez une séquence supplémentaire à tester lors de votre audit/test de plume.