Page 1 sur 1

Mot de passe perdu

Posté : 22 déc. 2011, 17:35
par ladinho58
Bonjour,

je travaille en ce moment sur le fait qu'un utilisateur ait perdu son mot de passe et qu'on puisse lui en générer un nouveau et qu'il le reçoive par mail.
Cependant, mon programme contient des erreurs que je n'arrive pas à cerner.
Pourriez-vous s'il vous plait jeter un coup d’œil aux éventuelles erreurs qui pourrait se cacher dans mon code ?
<?php
include_once('include/header.php');
?>

Création du formulaire : 
<?php
//if(isset($_GET['err']))
//			$msg = "<p class='erreur'>L'email rentré n'est pas valide.</p>";
//		elseif(isset($_GET['success']))
//			$msg = "<p class='info'>Vous avez reçu votre nouveau mot de passe, veuillez consultez votre boîte mail.</p>";
//		else $msg = "";
?>

<p> Vous avez oublié votre mot de passe ? Indiquez votre adresse e-mail et nous vous en renverrons un nouveau :</p>
<form method="post" action="new_pwd.php">
	<p>
		<p style="text-align: left;"><label for="email">E-mail :</label><input type="text" name="email" id="email" size="35" tabindex=1 placeholder="Veuillez indiquer votre E-mail"></p>
		<input type="submit" value="Valider"/>
	</p>
</form>

<?php
include("include/footer.php");
?> 
Traitement de l'information donnée en formulaire :
<?php
include_once("include/connexion.php");
include_once("include/include_commun.php");

$conn = mysql_connect(BDD_HOST,BDD_USER,BDD_PASSWD) or die('Impossible de se connecter à la base de données : ' . mysql_error());
mysql_select_db(BDD_NAME,$conn) or die('Impossible de sélectionner la base mydbname : ' . mysql_error());
mysql_query("SET NAMES 'utf8'");

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
		<title>VESPA</title>
		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="include/design.css" />
		<link rel="SHORTCUT ICON" href="include/img/favicon.ico"/>

<?php
if(!empty($_POST['email']))
$email = $_POST['email'];
else
exit("Veuillez renseigner votre adresse email");
 
$sql = "SELECT email FROM utilisateur WHERE email = '".$email."' ";
$req = mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
 
if(mysql_num_rows($req) != 1)//si le nombre de lignes retourne par la requete != 1
exit("mail inconnu.");
else
{
$row1 = mysql_fetch_assoc($req);
$retour = mysql_query("SELECT motdepasse FROM utilisateur WHERE email = '".$email."' ");
$row2 = mysql_fetch_assoc($retour); //contient le mot de passe que l'on a perdu (ancien mot de passe)
$new_password=fct_passwd(); //création d'un nouveau mot de passe
 
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$objet = 'Récupération de votre mot de passe';
 
if(!mail($row1['email'], $objet, /*$row2['pass']*/$new_password, $headers))
echo 'Probleme lors de l\'envoi du mail';
else
{
	//mise à jour de la base de données de l'utilisateur
	$req = "UPDATE utilisateur SET motdepasse = md5('".$new_password."') WHERE email = '".$email."' ")
	mysql_query($req); //ligne 47
	echo 'L\'email contenant votre nouveau mot de passe vous a été envoyé. Veuillez le consulter avant de vous connecter à VESPA';
}
?>	

<?php 
mysql_close($conn);
?>
Fonction qui crée une nouvelle chaine de caractère aléatoire :
	function fct_passwd( $chrs = "") 
	{

		if( $chrs == "" ) $chrs = 8;



		$chaine = ""; 



		$list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

		mt_srand((double)microtime()*1000000);

		$newstring="";



		while( strlen( $newstring )< $chrs ) {

			$newstring .= $list[mt_rand(0, strlen($list)-1)];

		}

		return $newstring;

	}

Les problèmes rencontrés :
Après avoir rentré mon adresse email, j'obtiens ce message d'erreur :

Parse error: syntax error, unexpected T_STRING in C:\wamp\www\vespa_b1\new_pwd.php on line 47

j'ai également de nombreuses erreurs dans qui s'inscrivent à cause de footer.php en dessous de mon formulaire:

Notice: Undefined variable: conn in C:\wamp\www\vespa_b1\include\footer.php on line 3
Call Stack

Warning: mysql_close() expects parameter 1 to be resource, null given in C:\wamp\www\vespa_b1\include\footer.php on line 3
<?php

mysql_close($conn); //ligne 3
?>

Merci de bien vouloir m'indiquer ce qui ne fonctionne pas. Je comprend bien qu'il se passe quelque chose dans la connexion de la base de données.. Parce qu'en fait normalement toutes les pages du site ne sont accessibles que si on est logué, or la on accède à une page sans être logué.

Re: Mot de passe perdu

Posté : 22 déc. 2011, 20:32
par Jim125
Tu devrais simplement lui envoyer un lien temporaire (15 minutes) avec token , dans sa boite e-mail et surtout pas un mot de passe.

Ce lien temporaire qu'il reçoit lui permettra de se connecter à une interface de ton site ou il tapera lui même son nouveau mot de passe.

Puis tu hashes ça en SHA-256 ou SHA-512 (évite le md5) + un grain de sel.

Car avec ton système là, le jour où il se fait pirater sa boite mail, en plus il se fera pirater son compte chez toi. pas glop. :non:

d'une pierre 2 coups comme on dit. :mrgreen:


[edit:] SHA-1 est obsolète,tout comme md5.

Re: Mot de passe perdu

Posté : 22 déc. 2011, 20:51
par moogli
Salut,

Y a quoi à la ligne précédente ? Tu n'aurai pas oublier un point virgule ou de fermer ' ou " ou ) ou } etc etc

@jim125 : si le mec se fait "pirater" son compte mail il pourra aussi utiliser le script de demande de nouveau mot de passé ;)

@+

Re: Mot de passe perdu

Posté : 22 déc. 2011, 21:34
par Jim125
@moogli: pas sur mon site car il faut en plus donner la réponse à la question secrète choisie à l'enregistrement.
Impossible de se faire renvoyer le mot de passe en piratant la boite e-mail. Ce serait trop simple. :non:

Re: Mot de passe perdu

Posté : 22 déc. 2011, 22:00
par AB
Oui et puis normalement le talken n'est valide que pour une durée de temps donnée.

Re: Mot de passe perdu

Posté : 26 déc. 2011, 22:50
par moogli
Wé après en général si tu ne gère pas d'info top secrète et ou bancaire ça doit aller y a pas de raison de se torturer.

après pour aller plus loin faudrait demander un changement de mot de passe tout les mois avec 8 caractères minis et tout le tremblement pour être presque bon coté sécu (avec le https et tout et tout :) ).

@+