Je recherche la meilleure méthode pour implémenter une fonction "mot de passe oublié".
Je viens avec 2 idées:
Lorsque l'utilisateur clique sur le mot de passe oublié, l'utilisateur doit saisir le nom d'utilisateur, l'e-mail et peut-être la date de naissance ou le nom de famille. Ensuite, un e-mail avec un mot de passe temporaire sera envoyé au compte de messagerie de l'utilisateur. L'utilisateur utilise le mot de passe temporaire pour se connecter et réinitialise son mot de passe.
Similaire, mais l'e-mail contiendrait un lien permettant à l'utilisateur de réinitialiser son mot de passe.
Ou n'importe qui peut me suggérer un moyen meilleur et plus sûr? Je pense également envoyer le mot de passe ou le lien temporaire, forcer l'utilisateur à réinitialiser le mot de passe dans les 24 heures, sinon le mot de passe ou le lien temporaire ne sera pas utilisable. Comment faire ça?
Réponses:
Mise à jour: révisée en mai 2013 pour une meilleure approche
password_change_requests
avec les colonnesID
,Time
etUserID
. Lorsque le nouvel utilisateur appuie sur le bouton, un enregistrement est créé dans la table. LaTime
colonne contient l'heure à laquelle l'utilisateur a appuyé sur le bouton «Mot de passe oublié». LeID
est une chaîne. Une longue chaîne aléatoire est créée (par exemple, un GUID), puis hachée comme un mot de passe (qui est un sujet distinct en soi). Ce hachage est ensuite utilisé comme «ID» dans le tableau.http://www.mysite.com/forgotpassword.jsp?ID=01234567890ABCDEF
. La page Forgotpassword.jsp devrait pouvoir récupérer le paramètre ID. Désolé, je ne connais pas Java, donc je ne peux pas être plus précis.ID
de l'URL, le hache à nouveau et vérifie par rapport à la table. Si un tel enregistrement existe et n'a pas plus de, disons, 24 heures, l'utilisateur est invité à entrer un nouveau mot de passe .la source
ID
,UserID
,Time
,TokenHash
.. Vous allez générer deux longues chaînes aléatoires Placez la première chaîne (le « id ») dans laID
colonne, hachage du second (le « jeton » ) et mettez le hachage dans laTokenHash
colonne. Le générer le lien commeforogotPassword.jsp?id=asdasd&token=asdasd
. Le jeton dans le lien n'est PAS haché. Cela a-t-il un sens maintenant?Tout dépend de votre site et du niveau de sécurité que vous essayez d'atteindre, mais le processus de base d'une application Web se déroule comme suit:
L'utilisateur accède à la page «J'ai oublié mon mot de passe» et entre son nom d'utilisateur ou son adresse e-mail (selon l'un des deux) pour demander une réinitialisation de mot de passe.
En option, à ce stade, vous pouvez confirmer la demande en demandant des informations supplémentaires telles que la réponse à une question de sécurité prédéfinie ou leur date de naissance, etc. Ce niveau supplémentaire empêche les utilisateurs de recevoir des e-mails qu'ils n'ont pas demandés.
Recherchez le compte de l'utilisateur. Enregistrez un mot de passe temporaire (généralement un GUID) et un horodatage par rapport à l'enregistrement du compte. Envoyez un e-mail à l'utilisateur contenant le mot de passe temporaire.
L'utilisateur clique sur le lien contenant le mot de passe temporaire et l'identifiant de l'utilisateur dans l'e-mail ou accède à la page «Mot de passe oublié» et copie-colle le mot de passe temporaire et son identifiant. L'utilisateur entre son nouveau mot de passe et le confirme.
Recherchez l'enregistrement de l'utilisateur et si l'heure actuelle est dans un délai spécifié (par exemple 1 heure) de l'horodatage enregistré à l'étape 2, hachez et enregistrez le nouveau mot de passe. (Evidemment seulement si les mots de passe temporaires correspondent!). Supprimez le GUID et l'horodatage temporaires.
Le principal ici est que l'utilisateur reçoit par courrier électronique un mot de passe temporaire qui lui permet de changer son mot de passe. Le mot de passe stocké à l'origine (il devrait être haché!) N'est jamais changé en mot de passe temporaire au cas où l'utilisateur s'en souviendrait.
Le mot de passe d'origine ne sera jamais affiché à l'utilisateur car il devrait être haché et inconnu.
Notez que ce processus repose entièrement sur la sécurité du compte de messagerie de l'utilisateur. Cela dépend donc du niveau de sécurité que vous souhaitez atteindre. Cela suffit généralement pour la plupart des sites / applications.
la source
Troy Hunt souligne d'excellents points dans son article, 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 . Les extraits les plus pertinents sont:
...
...
...
...
Il fait beaucoup plus de bons points pour éviter les fuites d'informations, les CAPTCHA, l'authentification à deux facteurs et bien sûr les meilleures pratiques de base comme le hachage de mot de passe. Je pense qu'il est important de noter que je ne suis pas d'accord avec Troy sur l'utilité des questions de sécurité, préférant le scepticisme de Bruce Schneier à l'égard de la pratique :
la source
J'irai avec:
la source
Lorsque vous envoyez des informations par e-mail, elles ne seront pas sécurisées. Il y a trop de façons de l'obtenir. Ce serait un jeu d'enfant pour un hacker expérimenté cherchant à voler vos informations.
Abstenez-vous d'envoyer des informations personnelles telles que des mots de passe et des informations sur les revenus par e-mail car cela peut devenir TRÈS EMBARRASSANT pour vous et votre organisation si ces informations ont été divulguées ou volées. Pensez sérieusement à la sécurité. Il suffit d'un seul incident pour que toutes les briques tombent.
En ce qui concerne la récupération de mot de passe, lisez attentivement les meilleures pratiques relatives aux mots de passe oubliés .
EDIT: lien mis à jour
la source
Comme dit, cela dépend du niveau de sécurité requis, cependant, si vous avez besoin d'un niveau plus élevé, certaines solutions nouvelles que j'ai vues incluent;
Affichage de la moitié du mot de passe temporaire lorsque l'identité de l'utilisateur a été confirmée (question de sécurité, adresse e-mail, etc.) puis l'autre moitié étant envoyée sur le compte de messagerie. Si le compte de messagerie a été compromis, il est peu probable que la même personne ait également réussi à effectuer une attaque d'intermédiaire. (Vu sur UK Goverment Gateway)
Confirmation de l'identité par e-mail et sur un autre support - par exemple un code envoyé par SMS à un mobile enregistré. (Vu sur eBay / PayPal)
Car quelque part entre ces deux extrêmes, implémenter des questions de sécurité peut être la voie à suivre, comme mentionné par DaveG.
la source
Si vous incluez une adresse e-mail avec l'inscription. Le bouton "Oublier le mot de passe" envoie un e-mail à cette adresse e-mail. Il garantit que les informations sont envoyées à un e-mail de confiance.
(À moins que la base de données ne soit piratée, mais alors rien n'est sûr).
la source
Voici trois très bons liens qui fournissent des informations sur les réinitialisations de mot de passe:
http://jtauber.com/blog/2006/03/20/account_management_patterns/
(Ne laissez pas les utilisateurs confirmer l'utilisation de GET): http://www.artima.com/forums/flat.jsp?forum=106&thread=152805&start=15&msRange=15
http://fishbowl.pastiche.org/archives/docs/PasswordRecovery.pdf
J'espère que cela pourra aider. Ils m'ont certainement aidé à comprendre le problème.
la source
J'appliquerais des adresses e-mail uniques à tous les comptes.
Ensuite, il s'agit simplement d'envoyer un lien vers une page temporaire qui permet à la personne de changer son mot de passe. (prévoir 24 heures ou moins)
Le compte de messagerie de l'utilisateur est le lien le plus faible dans ce scénario.
la source
N'envoyez jamais de mot de passe à l'utilisateur. Même s'il est généré automatiquement. Meilleure approche (recommandée et utilisée par SANS et d'autres):
S'il ne clique pas sur le lien dans les 24 heures environ, désactivez le lien (pour qu'il ne change plus le mot de passe).
Ne modifiez jamais le mot de passe sans le consentement de l'utilisateur. Cela signifie ne pas envoyer un nouveau mot de passe par e-mail simplement parce que quelqu'un a cliqué sur le lien du mot de passe oublié et a découvert le nom du compte.
la source