Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2011, 15h41   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 41
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2008
Messages : 41
Points : 13
Points : 13
Par défaut Mot de passe oublié - espace membres

Bonjour et BONNE ANNÉE à tous !
Voilà, j'ai créé un espace membres, avec formulaire d'inscription, et formulaire de connexion.
Au moment de l'inscription, le membre saisit ses nom, prénom, mdp, mail, etc... Les données sont sauvegardées dans une bdd "contact", et le mot de passe est haché par hash-1.
Si le membre oublie son mot de passe, je ne peux pas le lui renvoyer, puisqu'il est haché. Je voudrais donc lui envoyer un nouveau mot de passe par mail, qui lui permettrait de se connecter sur une page contenant un formulaire qui lui permettrait de saisir lui-même son nouveau mot de passe.
Mais, là, je suis perdu d'autant, qu'il doit y avoir plusieurs sécurités à prendre.
Sauriez-vous si il existe un tutoriel sur ce thème ?
Merci par avance pour votre aide.
MarieNum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 16h29   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Hello

Je ne suis pas un spécialiste en la matière mais je pense que tu pourrais y arriver assez simplement:
- Sur ton formulaire de login, tu ajoute un lien "Mot de passe oublié"
- Sur la page en question, tu mets un capcha (toujours utile dans ce cas là) ou une question à laquelle seul un humain peut répondre
- Si l'utilisateur à correctement répondu, tu lui demandes son email, puis tu vérifie que cet email correspond bien à un utilisateur dans ta table 'contact' (un index unique sur le champ 'email' peut s'avérer utile ici)
- Tu génère un mot de passe aléatoire, tu le hash et tu remplace le mot de passe de ton utilisateur avec et dans le même temps tu lui envoie le mot de passe aléatoire en clair par email.
- Si ton utilisateur à une page d'admin où il peut changer son mot de passe c'est gagné

Une autre solution envisageable:
- plutôt que de régérer un mot de passe et le lui envoyer par mail, tu lui envoies un lien web avec un token à usage unique (avec une simple table tu peux y arriver facilement)
- quand tu reçoit le token sur la page en question, tu le consome (tu l'enlève de ta table) et tu affiche un formulaire de changement de mot de passe

Quelques liens utiles :
http://www.encaps.net/software/php-captcha/
http://php.net/manual/en/function.mail.php

à toi de jouer
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/01/2011, 16h51   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 41
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2008
Messages : 41
Points : 13
Points : 13
Citation:
Envoyé par Benjamin Delespierre Voir le message
Une autre solution envisageable:
- plutôt que de régérer un mot de passe et le lui envoyer par mail, tu lui envoies un lien web avec un token à usage unique (avec une simple table tu peux y arriver facilement)
- quand tu reçoit le token sur la page en question, tu le consome (tu l'enlève de ta table) et tu affiche un formulaire de changement de mot de passe
Hello,
Merci Benjamin.
Ton autre solution m'intéresse beaucoup, mais je ne sais pas envoyer un token à usage unique ?
MarieNum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 16h57   #4
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Pour le token:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
<?php
/*                                                                            */
/* Titre          : Générer une chaine de caractère unique et aléatoire       */
/*                                                                            */
/* Date édition   : 04 Nov 2004                                               */
/*                                                                            */
 
 
 
//Générer une chaine de caractère unique et aléatoire
 
function random($car) {
$string = "";
$chaine = "abcdefghijklmnpqrstuvwxy0123456789";
srand((double)microtime()*1000000);
for($i=0; $i<$car; $i++) {
$string .= $chaine[rand()%strlen($chaine)];
}
return $string;
}
 
// APPEL
// Génère une chaine de longueur 20
$chaine = random(20);
 
?>
Ensuite pour vérifier que le token est unique: (dans l'exemple le token est "key").

Code :
1
2
3
4
5
6
7
8
9
10
 
                  $unique = false;
                  do{
                    $key = keygen(10);
                    $req = $db->prepare('SELECT id_utilisateur FROM table_token WHERE token_autorisation = ?');
                    $req->execute(array($key));
                    if(($res = $req->fetch(PDO::FETCH_ASSOC)) === false){
                      $unique = true;
                    }
                  }while($unique === false);
Cette portion est en PDO, à toi de la traduire en mysql si tu utilises mysql ^^
tu devrais pouvoir utiliser ceci pour faire par exemple une table "table_token" contenant un id_personne et un token (dans l'exemple KEY) qui définira si la personne a bien demandé à retrouver son mot de passe.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/01/2011, 17h08   #5
Candidat au titre de Membre du Club
 
Inscription : décembre 2008
Messages : 41
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2008
Messages : 41
Points : 13
Points : 13
Super, Merci, je comprends.
Je vais essayer de m'en sortir avec tout ça.
Mille mercis !
Très bonne fin de journée !
MarieNum est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h09.


 
 
 
 
Partenaires

Hébergement Web