formulaire de Pass PErdu !!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : formulaire de Pass PErdu !!

par Kaoteknik » 14 oct. 2007, 21:13

Puisque tu "haches" le mot de passe de l'utilisateur il ne sera pas possible de lui restituer... On en revient donc à ce que je disais plus haut : il faut générer un nouveau mot de passe et l'envoyer par mail.

Pour commencer tu peux créér un formulaire afin que l'utilisateur renseigne son pseudo et son adresse email, puis effectuer quelques contrôles afin de vérifier que l'adresse fournie existe dans ta BDD et correspond au pseudo indiqué. Jusque là je pense que tu ne devrais pas avoir de problèmes ! :)

Si tous les contrôles sont corrects, il faudra générer un mot de passe aléatoire. Voici un exemple de code que j'ai utilisé dans l'un de mes scripts (il est sans doute possible de faire mieux, mais je ne suis pas un pro...) :
// On indique que le mot de passe aléatoire contiendra entre 8 et 20 caractères
$nbre_caracteres = rand(8,20);

// On créé un tableau contenant la liste des caractères qui pourront être utilisés pour le nouveau mot de passe
$liste_caracteres = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0');

// On initialise la variable $nv_pass
$nv_pass = '';

// On effectue une boucle qui choisira aléatoirement des caractères...
// ... parmi la liste et retournera autant de caractères qu'il aura été défini...
// ... par la variable $nbre_caracteres
for ($i = 0 ; $i < $nbre_caracteres ; $i++) {
	// A chaque passage de la boucle on détermine aléatoirement un chiffre entre 0 et 61...
	// Ce qui correspond au nombre de caractère contenus dans le tableau de la variable $liste_caracteres
		$choix_caracteres = rand(0,61);
	// On affecte à chaque passage de la boucle le caractère...
	// ... qui aura été sélectionné dans la variable $nv_pass
    	$nv_pass .= $liste_caracteres[$choix_caracteres];
	}

Une fois ceci effectué il ne reste plus qu'à enregistrer le nouveau mot de passe dans la BDD (requêtre SQL "UPDATE" dont tu connais certainement déjà l'exitence, sans oublier toutefois de le hacher en md5 ou autre... ^^) et l'envoyer par email à l'utilisateur...
$mail_destinataire = $mail;

		$entete .= 'Bonjour '.$pseudo;

		$titre = 'Monsite.fr - Demande de nouveau mot de passe';
   		$message = '
				
				Vous avez reçu cet email depuis le site http://www.monsite.fr

				Votre nouveau mot de passe est : '.$nv_pass.'

				Veuillez le noter pour éviter de l\'égarer.
	
				Cordialement, l\'équipe de monsite.fr';
					
		
		mail($mail_destinataire, $titre, $message, $entete);
Voilà, testé et approuvé par mes soins (mais certainement améliorable), en espérant que cela pourra t'aider ! :wink:

Par la suite prévoies tout de même que l'utilisateur puisse modifier son mot de passe, car il risque de ne pas apprécier d'avoir à taper à chacune de ses connexions sur ton site un mot de passe comprenant entre 8 et 20 caractères qui ne signifient absolument rien. En l'état le mot de passe sera certes plus sécurisé qu'un "michel03" ou "janvier44", mais nettement moins pratique...

Voilà, bon courage pour la suite ! :)

par Poinball » 13 oct. 2007, 23:52

ouais je suis en md5 :) pouvez vous me donner un example de code que je pourrais me baser pour construire mon code :?

par jojolapine » 13 oct. 2007, 16:04

pour détailler la différence entre le cryptage et le hachage, c'est que lors d'un cryptage, il y a toujours moyen de décrypter les données (un exemple http://fr.wikipedia.org/wiki/Chiffre_de_C%C3%A9sar)
Par contre dans le cas d'un hachage (md5, sha1) il est impossible de revenir avec certitude à l'objet de départ...
Le cryptage est dit bijectif et le hachage injectif ;)

par Kaoteknik » 13 oct. 2007, 15:50

Petite précision, si le mot de passe est seulement crypté alors si il est possible de lui redonner son mot de passe, c'est si il est hashé qu'on ne peut pas revenir au mot de passe de départ.
Ah, tu me l'apprends ! (Comment fait-on dans ce cas ?).

Preuve s'il en est que j'ai encore ma place dans la section "Débutants" de ce forum ! :P

Par contre en effet il n'est pas évident de retenir un mot de passe généré aléatoirement, ce pourquoi il est utile de prévoir un module "gestion de compte" ou "profil" pour les utilisateurs, afin qu'ils puissent modifier leurs infos personnelles, dont le mot de passe (module qui ne doit être évidemment accessible que si un utilisateur s'est formellement identifié).

par jojolapine » 13 oct. 2007, 15:43

Petite précision, si le mot de passe est seulement crypté alors si il est possible de lui redonner son mot de passe, c'est si il est hashé qu'on ne peut pas revenir au mot de passe de départ.
Sinon je plussoie Kaoteknik, il suffit de regénérer un mot de passe, de toute façon, tu dois bien avoir une page pour changer son mot de passe? donc une fois qu'il s'est reconnecté avec le mot de passe que tu lui auras donné, il pourras en rechanger (perso un mot de passe généré qui ressemble à z7iOzpJ785eg8 j'arrive pas bien à le retenir :langue:)

par Kaoteknik » 13 oct. 2007, 15:37

Pour commencer si tu n'as pas crypté le mot de passe de l'utilisateur dans la base de données à l'aide d'une fonction assujetie à ce rôle (ce qui n'est tout de même pas conseillé pour des raisons de confidentialités), il te suffira d'aller consulter ta base pour connaître le mot de passe de l'utilisateur et lui renvoyer.

Si par contre tu as pris soin de crypter les mots de passe, tu ne pourras pas les récupérer et il te faudra donc en générer un nouveau et l'envoyer au demandeur.

Tout d'abord il te faudra un formulaire où l'utilisateur devra renseigner son pseudo et son adresse mail. Quelques vérifications s'imposeront alors à partir de la BDD afin de contrôler que le pseudo et l'adresse mail possèdent bien le même identifiant, ceci afin d'éviter tout "piratage" de compte.

Si tout est en ordre, et si le mot de passe de l'utilisateur est crypté, tu n'auras pas d'autre choix que d'en générer un nouveau. La fonction "rand" va te permettre de le faire. Enfin tu n'auras plus qu'à envoyer ce nouveau mot de passe à l'utilisateur à l'adresse qu'il aura indiqué, à l'aide de la fonction "mail".

par jojolapine » 13 oct. 2007, 08:54

Bonjour,
Tout va dépendre de comment sont stocké tes mot de passes dans la base...
md5, sha1, ... ?
Et qu'est-ce qui te bloque dans ce formulaire?

formulaire de Pass PErdu !!

par Poinball » 13 oct. 2007, 01:41

Bonjour ! je me demande fortement comment créer un Formulaire de pass perdu pour faire que jenvoye le pass au Email indiqué ... S'il existe un tuto jaimerais bien le savoir :P !!

Merci !