Reinitialiser le password perdu d'un utilisateur

Eléphanteau du PHP | 22 Messages

14 mars 2008, 14:00

Bonjours à toutes et à tous.

Je souhaiterai mettre en place un bouton ou un lien (sur une page) qui permettrai à l'utilisateur de remplacer son mot de passe s'il l'avait oublié.

Pas de le récupérer car dans la base de donnée il est crypté !

Les pages protégés sont accéssibles grace à un scrypt session start.
Lorsque l'utilisateur est authentifié dans la base de donnée il peut accéder à tout le contenu du site.

Pouvez-vous m'aider à coder ce scrypt php SVP ?

En vous remerciant d'avance, Jean.

ViPHP
ViPHP | 1996 Messages

14 mars 2008, 15:17

Ah mon petit, n'écris pas cela, les modos vont te faire la morale!!!

Si tu dis crypté tu peux normalement le décrypter et le ré envoyer par email par exemple mais si il est hashé (type md5()) là je suis d'accord avec toi. Le plus simple s'il est hashé : recréer un user ou changer de méthodes de stockage.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 4674 Messages

14 mars 2008, 15:25

Bonjour,

si tu veux que l'utilisateur puisse modifier son mot de passe, la technique à utiliser est d'en générer un nouveau puis de le crypter. Enfin tu envoies une copie du mot de passe par email (non crypté évidemment), et tu enregistres le nouveau de passe (crypté cette fois) dans la base de donnée. Je ne vois pas où est la difficulté dans la méthodologie :-k.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

14 mars 2008, 17:53

Bonjour,

si tu veux que l'utilisateur puisse modifier son mot de passe, la technique à utiliser est d'en générer un nouveau puis de le crypter. Enfin tu envoies une copie du mot de passe par email (non crypté évidemment), et tu enregistres le nouveau de passe (crypté cette fois) dans la base de donnée. Je ne vois pas où est la difficulté dans la méthodologie :-k.
Bonjours HyWaN.

Je trouve ton idée très structuré, proposer à l'utilisateur de réinitialiser son password en lui proposant d'en générer un nouveau est de loin le plus simple, même s'il recrée le même.

Renvoyer le password à l'utilisateur, que l'envoi soit en clair ou pas, ne me semble pas une idée disons, très encourageante pour la sécurité.

Comment peut-on faire ça ?

Je ne sais pas par ou commencer mes recherches :(

Merci pour tes conseils.

ViPHP
ViPHP | 4674 Messages

14 mars 2008, 18:01

Pour améliorer la sécurité lors de l'envoie, tu peux envoyer un premier mail disant qu'une demande de nouveau mot de passe a été demandée. L'utilisateur clique sur un lien qui va confirmer la génération du nouveau mot de passe, et suite à la confirmation, on envoie le mail qui contient le nouveau mot de passe.

De cette façon, si quelqu'un veut générer un nouveau mot de passe, une confirmation sera obligatoire, donc on ne pourra pas changer les mots de passe à tour de bras.

Technique utilisée partout si je ne m'abuse ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

14 mars 2008, 21:46

Bonsoir HyWan.

Si je peux l'interprêter comme cela, (tu propose):

1° D'améliorer la sécurité en envoyant un premier mail (à l'utilisateur toto) en stipulant que cet utilisateur, vient de demander de nouveau mot de passe, ont peut donc modifier le message en disant que l'utilisateur toto, à déclarer avoir tout simplement perdu son mot de passe et souahite le recréer ???

2° Alors, dans cet email, l'utilisateur clique sur un lien qui pourait le redirige sur une page du site Internet pour vérifier que l'adresse email utilisé est bien utilisé est bien celle de l'utilisateur toto qui répond.

3° l'utilisateur toto confirme la création d'un nouveau mot de passe, et suite à la création de ce nouveau mot de passe, il serait super bien qu'il reçoive un mail dans lequel il devra cliquer sur un lien pour réactiver son compte d'utilisateur.

De cette façon, si quelqu'un veut générer un nouveau mot de passe, en cliquant sur le lien (j'ai oublié mon mot de passe) il devra obligatoirement:

4° fournir une adresse email (la même qu'à la création du compte se serait bien, car moins compliqué puisque le compte toto à déja une adresse email enregistré dans la BDD).

5° lorsque l'utilisateur toto, clique sur se lien (j'ai oublié mon mot de passe), le compte devra être désactivé dans la BDD (car à l'inscription, l'utilisateur toto, doit activer son compte en répondant à un email, avant son compte est crée mais inactif) il n'est donc pas imaginable, que cet utilisateur puisse accéder à des pages protégées s'il à perdu son mot de passe (qu'est-ce qui prouve qye s'est bien lui qui demande de générer un nouveau password ?).

6° ensuite, une confirmation de la création de son nouveau password sera obligatoire envoyé par mail à l'adresse indiquée, cela permettra alors d'activer à nouveau son compte d'utilisateur toto.
Et la boucle est bouclée.

Comme tu le dis, donc on ne pourra pas changer les mots de passe à tour de bras et surtout, je ne pense pas que les gens vont s'amuser à changer leur password juste pour s'amuser :wink: .

Peut-on mettre en même temps une protection contre les abus de création de compte avec un image à recopier dans une case comme je le vois de plus en plus ?

Oups, je crois que j'en demande beaucoup pour un bleu !
:(

Est-ce que ça existe sous la forme de zip pret à être adapté ???

En te remerciant par avance, bonne soirée HyWan.

Jean.

ViPHP
ViPHP | 4674 Messages

15 mars 2008, 00:37

Tu vas chercher un peu loin je pense. Voici ce que je propose (plus simplement) :
  1. on demande un nouveau mot de passe pour un compte (login) donné ;
  2. un mail est envoyé à l'adresse associé à ce compte ;
  3. ce mail contient un lien qui va être une confirmation. Il stipulera qu'une demande de renouvellement de mail a été faite et que l'on doit cliquer si cette démarche provient du propriétaire du compte ;
  4. arrivé sur la page du lien (page de confirmation), on peut demander l'ancien mot de passe et deux fois le nouveau (confirmation du nouveau mot de passe). On retrouve les informations du membre grâce à son adresse e-mail passé en paramètre de lien ($_GET). Au passage, une confirmation peut avoir une durée de validité, ça évitera les abus en tout genre. Par exemple : 3 jours. Il faut pouvoir modéliser ça dans ta base de données, prends en compte.
Pas besoin que le compte soit désactivé pendant le changement de mot de passe. Ce serait même une opportunité pour les personnes mal intentionnées ! À chaque fois qu'elles feront une demande de renouvellement de mot de passe, le compte serait bloqué, pas très cool ...

Concernant le contrôle de création de compte, c'est ce qu'on appelle les captchas. Attention, je désapprouve cette technique car elle n'est pas du tout accessible ! En effet, comment un aveugle fait-il pour créer un compte où la dernière étape est la lecture d'une image ? Une hérésie ...
Je te conseille de lire ce sujet : Il est fini le temps des captchas, ouvert par Berzemus, qui apporte des suggestions intéressantes.

Ensuite, je ne sais pas si ça existe sous forme de module (et pas de zip ...). À toi de chercher, je ne connais pas les sites qui proposent des modules PHP.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

15 mars 2008, 00:53

Bonsoir HyWan,

Je suis en admiration de ta sollicitude. Incapable d'écrire la plus petite ligne de code sans me faire tenir la main, je vais pas abuser moi même de ta bonté.

Tu a entierement raison, faisons simple et efficace (je vais aller lire le sujet du captchas en lien car handicapé moi même je suis très sensible à cette problèmatique, merci du rappel).

Juste un truc qui m'embête!
Comment tu ferai dans me N°4 du scénario pour fournir l'ancien mot de passe avant de saisir deux fois le nouveau, puisque la démarche est de proposer le remplacement d'un password oublié :roll: .
arrivé sur la page du lien (page de confirmation), on peut demander l'ancien mot de passe et deux fois le nouveau (confirmation du nouveau mot de passe). On retrouve les informations du membre grâce à son adresse e-mail passé en paramètre de lien ($_GET). Au passage, une confirmation peut avoir une durée de validité, ça évitera les abus en tout genre. Par exemple : 3 jours. Il faut pouvoir modéliser ça dans ta base de données, prends en compte.

ViPHP
ViPHP | 4674 Messages

15 mars 2008, 01:04

Euh .. hum hum ... Je vais prévenir les admins, ils vont te régler ton compte :twisted:. Il ne s'est rien passé, on est d'accord ;-).

Concernant ton handicape, tu as quoi ? Si ça te dérange d'en parler, contacte moi par mp, j'aurais quelques questions à te poser :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

15 mars 2008, 01:50

Euh .. hum hum ... Je vais prévenir les admins, ils vont te régler ton compte :twisted:. Il ne s'est rien passé, on est d'accord ;-).:).
Ok je t'ai posté un mp.

J'ai lu (un peu en anglais) les articles sur les captchas :wink: et éffectivement, s'est pas trop le top tout ça.
Reste le fait que s'est bien des robot que j'aurais souhaité protéger mes pages web, des créations automatisées de compte pourriels par des robots, qui ont pour seul but de récuppérer les adresse mail des BDD pour spammer par la suite.

Bon je te dirais, pour l'instant j'ai 3 users inscrits :? mais bon s'est pas une raison de laisser les robots nous pourrir la vie :P

Merci pour tout HyWan, ta démarche est vraiment sympa.

Jean

ViPHP
ViPHP | 4674 Messages

15 mars 2008, 02:16

La théorie veut qu'un membre n'est pas accès aux informations privés des autres membres (dans la théorie seulement ; pour un site communautaire, c'est difficilement applicable).

Il existe des alternatives aux captchas, notamment les SAPTCHA (Semi Automatic Public Turing Test to Tell Computers and Humans Apart). Je te laisse chercher :). À la limite, c'est presque un problème secondaire. Commence déjà par coder ton système de récupération de mail, on verra le reste après ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

15 mars 2008, 02:46

Commence déjà par coder ton système de récupération de mail, on verra le reste après ;-).
Peut-tu me donner des mots clé pour faire des recherches pour commencer à coder ?
Je ne sais pas par ou je dois commencer :cry:

ViPHP
ViPHP | 4674 Messages

15 mars 2008, 13:57

Tu as déjà fait un peu de PHP avant ou pas ?

Tu commences par créer ton système de lien, i.e. : quand on clique sur le lien « mot de passe oublié », il va chercher l'infos dans la base de données et envoyé le mail. Commence par ça.

Parcourir une base de données se fait à l'aide des fonctions mysql de PHP (si tu utilises MySQL, je pense que c'est le cas) : voir la documentation PHP pour MySQL. Ensuite tu peux regarder la documentation PHP pour l'envoie de mail. Et tu verras, le reste viendra tout seul (car ce sera sensiblement les mêmes opérations).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 22 Messages

15 mars 2008, 17:11

Bonjour HyWan,

Je fais pas vraiment du php, en fait j'éssai de comprendre depuis quelques jours comment ça fonctionne.

Un collègue m'a mis en place une protection de pages (à ma demande), et j'éssai d'apprendre sur le tas.
S'est variment le cas de le dire, je dois trouver des solutions au fur et à mesure que je découvre les problèmes et/ou les risques comme perdre le mot de passe.
Tu as déjà fait un peu de PHP avant ou pas ?
Oups, je viens de commencer :?

Un copain m'a montrer deux trois truc pour débutter et hop tu t'inspire comme il m'a dit.

Alors depuis j'éssai de m'inspirer :x

J'ai déja sur mes pages, une méthode d'inscription d'utilisateur qui s'inscrivent dans une BDD.
Lorsqu'il est inscrit il reçois automatiquement un mail avec un lien pour activer son compte dans la BDD.

J'ai compris que la page index, verrifie si l'user à une session authentifié avec
<?php
session_start();
if (!isset($_SESSION['login']))
{
// S'il est authentifié il à accés au contenu mais, s'il ne l'est pas il sera redirigé sur la page accesinterdit.html'
@require('../Fiches_tech/accesinterdit.html');
exit();
}
?>
Si l'utilisateur n'est pas authentifié, il peut sur la page se diriger vers la page "créer un compte utilisateur en remplissant un formulaire qui, s'il est correctement remplis, envois les données dans la BDD :
<?PHP
// la code est volontairement tronqué ...

		if ($erreur == false)
		{
			$requete="INSERT INTO User_Registered (login, password, prenom, nom, adresse1, adresse2, CP, city, phone, email, email2, confirme) ";
			$requete = $requete ."VALUES ('".$login."', PASSWORD('".$password."'), '".$prenom."', '".$nom."', '".$adresse1."', '".$adresse2."', '".$codepostal."', '".$ville."', '".$telephone."', '".$email."', '".$email2."', 'N')";
		
			//echo 'REQUETE :'.$requete;
			$resultat = mysql_query($requete);
			if ($resultat == FALSE)
			{
				echo "Erreur Base de donnees : ".mysql_errno() . ": " . mysql_error() . "\n";
				echo "Requete : ".$requete;
			}
			else
			{
				 $headers ='From: "Webmaster my web.fr"< technicien-assistance@my web.fr>'."\n"; 
     			 $headers .='Reply-To:  webmaster@my web.fr'."\n"; 
			     $headers .= "MIME-Version: 1.0\r\n"; 
				 $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n"; 
			     $headers .='Content-Transfer-Encoding: 8bit'; 
				 mail($email, 'Confirmation d inscription à my web.fr', '<html><head></head><body>corps du mal avec lien d"'"activation de compte.....</body></xhtml>
?>
// Fin du code tronqué

Mis à part ce que m'a montrer mon collégue, je ne connais rien de plus.

J'avoue que j'ai du mal à tout comprendre mais j'essais.

ViPHP
AB
ViPHP | 5818 Messages

15 mars 2008, 18:26

Juste une petite parenthèse pour dire que si tu es débutant en php il y a un très bon site d'initiation : phpdebutant.org
Qaund tu auras fait tous les tutos de la colonne de droite, tu y verras déjà un peu plus clair et tu pourras nous poser des questions plus précises.
Je dis cela parce que ce que tu souhaites faire me semble un peu compliqué comme exercice pour un grand débutant (à moins que tu aies une expérience en programmation par ailleurs) :wink: