Quelques suggestions:
Ne réinitialisez pas le mot de passe de l'utilisateur avant d'être confirmé. Ne réinitialisez pas immédiatement le mot de passe de l'utilisateur. Ne le réinitialisez que lorsque l'utilisateur clique sur un lien de confirmation envoyé à son adresse e-mail pré-enregistrée.
Exiger un CAPTCHA. Lorsqu'un utilisateur demande que son mot de passe soit réinitialisé, forcez-le pour résoudre un CAPTCHA avant de continuer. Cela évite aux outils automatisés d'essayer de semer le chagrin de nombreux utilisateurs et l'oblige à prouver qu'il est un humain (pas un robot).
Aléatoire. La durée limitée L'URL de réinitialisation du mot de passe doit inclure un composant aléatoire et impossible à deviner. Assurez-vous d'utiliser un caractère aléatoire de qualité cryptographique. La sortie de / dev / urandom
ou System.Security.Cryptography.RNGCryptoServiceProvider
serait un bon choix. La sortie de rand ()
ou random ()
ou System.Random
n'est pas assez aléatoire et serait un mauvais choix. Un GUID ou un horodatage n'est pas assez aléatoire et ne serait pas un bon choix.
Inclure une limite de temps. Le lien de confirmation de réinitialisation devrait expirer après un délai raisonnable: disons 24 heures . Le lien ne doit être utilisable qu'une seule fois et doit expirer immédiatement dès qu'il est utilisé.
Inclure un texte explicatif dans l'e-mail. Vous pouvez ajouter un texte explicatif au e-mail, pour expliquer pourquoi l'e-mail a été envoyé, au cas où quelqu'un demanderait une réinitialisation pour un compte qui n'est pas le vôtre. Vous pouvez inclure du texte comme "Quelqu'un a demandé que le mot de passe soit réinitialisé pour votre compte nom d'utilisateur
sur site
. Si vous avez fait cette demande, cliquez ici pour changer votre mot de passe. Si vous n'avez pas fait cette demande, cliquez ici pour annuler la demande. "
Envoyez un e-mail une fois le mot de passe réinitialisé. Une fois le mot de passe réinitialisé, envoyez un e-mail à l'utilisateur à faites-leur savoir que le mot de passe a été modifié. N'incluez pas le nouveau mot de passe dans cet e-mail.
Surveiller les annulations. Vous pouvez envisager d'inclure une logique pour surveiller la fréquence à laquelle les utilisateurs cliquent sur le lien d'annulation indiquant qu'ils n'ont pas demandé de réinitialisation. Si cela dépasse un certain seuil, il peut être utile d'envoyer une alerte aux opérateurs système. De plus, si un lien d'annulation pour une demande est visité après le lien de confirmation est visité, c'est une indication potentielle d'une attaque contre cet utilisateur - vous pouvez prendre des mesures à ce stade, par exemple, invalider le mot de passe de l'utilisateur et leur demander de réinitialiser à nouveau leur mot de passe. (Il s'agit d'une défense contre l'attaque suivante: l'attaquant accède à la boîte aux lettres de l'utilisateur, demande alors que son mot de passe sur votre site soit réinitialisé, puis visite le lien de confirmation. Si l'attaquant ne supprime pas ces e-mails de la boîte de réception de l'utilisateur, puis, lorsque l'utilisateur réel lit son e-mail, il peut cliquer sur le lien d'annulation, ce qui vous indique un problème éventuel.)
Utilisez HTTPS. Le lien doit utiliser https (et non http :), pour se protéger contre diverses attaques (par exemple, les attaques Firesheep sur les utilisateurs surfant sur le Web à partir d'un café Internet).
Consigner ces opérations. Je suggère de consigner toutes ces demandes. En plus de consigner le nom d'utilisateur de l'utilisateur, vous pouvez enregistrer l'adresse IP du client qui a demandé qu'un lien de réinitialisation soit envoyé par courrier électronique à l'utilisateur, ainsi que l'adresse IP du client qui a visité le lien de réinitialisation.
Lectures supplémentaires. Vous pouvez également lire l'excellent article de blog de Troy Hunt, Tout ce que vous avez toujours voulu savoir sur la création d'une fonction de réinitialisation de mot de passe sécurisée. Merci à @coryT pour un lien vers cette ressource.
Enfin, envisagez l'authentification sans mot de passe. Les mots de passe posent de nombreux problèmes en tant que mécanisme d'authentification, et vous pouvez envisager d'autres méthodes d'authentification des utilisateurs, telles que le stockage d'un cookie persistant sécurisé sur leur ordinateur avec un élément impossible à deviner secret pour les authentifier. De cette façon, il n'y a pas de mot de passe à oublier et aucun moyen pour l'utilisateur d'être hameçonné, bien que vous deviez fournir un moyen pour un utilisateur d'autoriser l'accès à partir d'une nouvelle machine ou d'un nouveau navigateur (éventuellement par e-mail au pré- adresse e-mail enregistrée). Ce document d'enquête contient une excellente étude de nombreuses méthodes d'authentification de secours et de leurs forces et faiblesses.