- 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($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 ..