Problème récupération mot de passe.

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 : Problème récupération mot de passe.

Re: Problème récupération mot de passe.

par @rthur » 22 mai 2016, 19:18

Bonjour,

Tu devrais filtrer toutes les variables reçues d'un utilisateur avec filter_var()

Re: Problème récupération mot de passe.

par Legrandfifou » 22 mai 2016, 18:12

Up juste besoin de savoir si mon système présente des failles :)

Problème récupération mot de passe.

par Legrandfifou » 21 mai 2016, 20:02

Bonjour , j'essaye actuellement par moi même et sans tutoriel de faire un mot de passe oublié je vais d'abord dans un premier temps expliquer ma démarche puis je montrerais le code car je bloque quelque part :/

- Mot de passe oublié ( page )
- Demande du pseudo et adresse email
- On envoi un mail à la personne en changement sa cle , donc lorsqu'il se connectera si son pseudo correspond a la même ligne que sa clé on affiche un formulaire de reset
- Si non : page d'erreur
- Si oui possibilité de changer de mot de passe avec un sha1 et update du champs password WHERE email = :email
- Une fois mot de passe changé nouvelle clé générer pour éviter de changer avec la même clé qu'avant ( 1 nouvelle clé = 1 mdp )
- EDIT : J'ai réussi

Voila le plan que je me suis mis en tête cependant j'ai une erreur , tout marche niquel donc demande de reset et reset qui se fais si le pseudo correspon a la clé , et le changement du password ce fait aussi cependant quand j'essaye de me connecter avec mon nouveau pseudo il me met que celui ci est faux...

Voici mes codes :

Demande de reset (forgot.php)
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
			<title>Quad Dutch Clan - Joins us !</title>
					<link rel="stylesheet" type="text/css" title="style" href="style.css"/>
   
   
   </head>
	
	
	
    <body>
		
		
		<?php include("menu.php"); ?>

		<?php 

		$bdd = new PDO ('MES IDENTIFIANTS CACHER VOLONTAIREMENT');	
		$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

		if (!isset($_SESSION['pseudo']))
						
								{

								echo
										'

										<div class="connexion_case_mdp">
										<div class="title_connexion">Change your password</div>
											<br />
											<form action="" method = "POST">
											  		<label for="pseudo" class="connexion_case_label"> Pseudo : </label>
											  		<br />
											  		<input type="texte" name = "pseudo" class="connexion_formulaire_case"/> 
											  		<br />
  													<label for="email" class="connexion_case_label"> Email : </label>
  													<br />
   													<input type="texte" name = "email" class="connexion_formulaire_case"/> 
   													
    												<button type="submit" name="connexion_mdp" class="connexion_button_mdp">Submit</button>
    												
    										</form>
    									
    											';


								

								if(isset($_POST['connexion_mdp']))
								{
									if(isset($_POST) && (!empty($_POST['email'])) && (!empty($_POST['pseudo'])))
									{

										$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
										$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;


											echo 'A link has been sent to your email adress.';

													$cle = md5(microtime(TRUE)*100000);


													$stmt = $bdd->prepare('UPDATE membres SET cle = :cle WHERE email = :email AND pseudo = :pseudo');
													$stmt->execute(array(
														'cle' => $cle,
														'email' => $email,
														'pseudo' => $pseudo));
														

													$destinataire = $email;
													
													$sujet = "Changement de mot de passe" ;
													$entete = "From: [email protected]" ;
													
													// Le lien d'activation est composé du login(log) et de la clé(cle)
													$message = 'You asked to change your password, here is the link to reset your password.


													http://www.qdc.esy.es/change.php?pseudo='.urlencode&#40;$pseudo).'&cle='.urlencode($cle).'

													T. Florent - Administrator
													---------------------------
													If you didn\'t asked for this reset just ignore this message 
													or if you think someone is using your account please contact us
													here : http://www.qdc.esy.es/contact.php
													This is an automatic mail, please don\'t respond to it.';

													mail($destinataire, $sujet, $message, $entete) ; // Envoi du mail
										}
										else 
										{
											echo 'Your email adress doesn\'t exist in our data base';
										}
									}
									else
									{
										echo 'We need a email adress to reset your password.';
									}
								}
								

		else
		 {
		 	echo '<div class="connexion_case">Vous êtes déjà connecté !</div>';
			}
		?>
					
	</body>
</html>
(change.php)
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
      <title>Quad Dutch Clan - Joins us !</title>
          <link rel="stylesheet" type="text/css" title="style" href="style.css"/>
   
   <?php include("menu.php"); ?>
   </head>
  
  
  
    <body>
<?php 

$bdd = new PDO ('MES IDENTIFIANTS');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$pseudo = $_GET['pseudo'];
$cle = $_GET['cle'];

$stmt = $bdd->prepare('SELECT cle, email FROM membres WHERE pseudo = :pseudo');

if($stmt->execute(array(':pseudo' => $pseudo)) && $row = $stmt->fetch())
  {
    $clebddchange = $row['cle'];
    $emailbddchange = $row['email'];
  }

  	 if($cle == $clebddchange) // On compare nos deux clés	
       {
          // Si elles correspondent on active le compte !	
          echo '<div class="connexion_case">
                    <div class="title_connexion">Change password</div>
                      <br />
                      <form action="" method = "POST">
                            
                            <label for="password" class="connexion_case_label"> New password : </label> 
                            <br />
                            <input type="password" name = "password_change" class="connexion_formulaire_case"/> 
                            <br />
                            <br />
                            <button type="submit" name="submit_change" class="connexion_button_2">Submit</button>
                        </form></div> ';

              if(isset($_POST['submit_change']))            
              {
                if(!empty($_POST['password_change']))
                {


                $pass_hache_change = sha1($_POST['password_change']);

                $pseudo = $_GET['pseudo'];

                $sql = "UPDATE membres SET password = :pass_hache_change WHERE pseudo = :pseudo";


                          $params = array(  ':pseudo' => $pseudo,
                                            ':pass_hache_change' =>  $pass_hache_change     
                                       );

                          $query = array($sql,$params); // pour le debug

                          try 
                          {
                            $req = $bdd->prepare($sql);
                            $req->execute($params);

                          } 

                          catch(Exception $e) {
                            echo "<pre><br>".$e->getMessage()."<br>";
                            print_r($query);
                            echo "</pre>";
                          }

                $cle_inchanger = md5(microtime(TRUE)*100000);

                          $stmt = $bdd->prepare('UPDATE membres SET cle = :cle WHERE pseudo = :pseudo');
                          $stmt->execute(array(
                            'cle' => $cle_inchanger,
                            'pseudo' => $pseudo));
                          header('Location: connexion.php');
                }
                else
                {
                  echo 'Merci de renseigner un mot de passe';
                }

              }

       }

      else // Si les deux clés sont différentes on provoque une erreur...
       {
          echo "<div class='activation'>Error ! Your password can't be change...<br>
          Check if the link you copy is correct , it's very important to copy all the letters and the numbers <br>
          <br>
          <br>
          If you think it's an error please contact a staff , to contact a staff please use this link : 
          <br>
          <a href='contact.php'>Contact us</a>"
          ;
       }
  
?>

</body>
</html>
Mais lors de la connexion sur ma page il me met que le password n'est pas bon et je ne comprend pas pourquoi car ma connexion se déroule comme ceci :
<?php
if (!isset($_SESSION['pseudo']))
						
								{

								echo
										'

										<div class="connexion_case">
										<div class="title_connexion">Log In<img src="cadenas.png" class="cadenas"></div><!--PNG par http://www.pngfactory.net/png/20638/Security Auteur : Templatic.com-->
											<br />
											<form action="" method = "POST">
  													<label for="pseudo" class="connexion_case_label"> Pseudo : </label>
  													<br />
   													<input type="texte" name = "pseudo" class="connexion_formulaire_case"/> 
   													<br />
   													<br />
   													<label for="password" class="connexion_case_label"> Password : </label> 
   													<br />
    												<input type="password" name = "password" class="connexion_formulaire_case"/> 
    												<br />
    												<br />
    												<button type="submit" name="connexion" class="connexion_button_2">Connexion</button>
    												<div class="mdp_oublier"><a href="forgot.php">Mot de passe oublié ?</a></div>
    										</form>
    									
    											';


								}
					
							if(isset($_POST['connexion']))

  							{
  								

							
							
							$pseudo = $_POST['pseudo'];

							$stmt = $bdd->prepare('SELECT actif FROM membres WHERE pseudo = :pseudo');
							
							if ($stmt->execute(array(':pseudo' => $pseudo))  && $row = $stmt->fetch())
								  {
								   	$actif = $row['actif']; // $actif contiendra alors 0 ou 1
								  }


							if($actif == '1') // Si $actif est égal à 1, on autorise la connexion
  							{
							 $pseudo = addslashes($_POST["pseudo"]) ;
						

								// Hachage du mot de passe
								$pass_hache = sha1($_POST['password']);

								// Vérification des identifiants
								$req = $bdd->prepare('SELECT id FROM membres WHERE pseudo = :pseudo AND password = :password');
								$req->execute(array(
								    'pseudo' => $pseudo,
								    'password' => $pass_hache));

								$resultat = $req->fetch();

								if (!$resultat)
								{
								    echo '<div class="mdp_id_error">Mauvais identifiant ou mot de passe !</div></div>';
								}
								else
								{
								    $_SESSION['id'] = $resultat['id'];
								    $_SESSION['pseudo'] = $pseudo;
								    echo '<div class="mdp_id_granted">Vous êtes connecté !</div>';
   									sleep(2);
   									header('Location: index.php');
								}
								
							  }
							else // Sinon la connexion est refusé...
							  {
							   echo 'Votre compte ne semble pas être activé ou n\'existe pas !';
							  }
							}


						
					

					?>
merci à ceux qui m'aideront et si vous voyez qu'il y a une faille de sécurité ou que ce n'est pas bien fais dite moi j'essaye de progresser :)

EDIT : j'ai réussi petite erreur de frappe mais j'aimerais savoir si c'est un bon système ou si le sytème que j'ai fais présente une ou plusieurs failles ..