Wachtwoord herstel
Het wachtwoord word niet gewijzigd, terwijl de melding "Wachtwoord veranderd! Je kunt nu inloggen" word weer gegeven. Dus de query is geslaagd, maar het wachtwoord ongewijzigd.
Code (php)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
require 'session.php';
require 'db.php';
include 'header.php';
if (isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['werk']) && !empty($_POST['werk'])) {
//E-mail formulier is ingevuld
$email = mysqli_real_escape_string($mysqli, $_POST['email']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Geen geldig e-mail adres! Ga naar de <a href=\"login.php\">registratie</a> pagina!";
}
else {
//kijk of het email adres al voorkomt in de database
$sql = "SELECT email FROM login WHERE email = '$email'";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error());
if (mysqli_num_rows($result)) {
//Wachtwoord resetten / Maak een nieuwe hash aan
$hash = md5(rand(0,100000)); // Genereer willekeurige 32 character hash
$sql = "UPDATE login SET hash='$hash' WHERE email='$email'";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error());
$subject = "Webshop wachtwoord herstel";
$message = "Je kunt met de onderstaande link je wachtwoord herstellen.
http://www.ztjuh.tk:81/webshoptest/resetpassword.php?email=" . $email . "&hash=" . $hash;
$headers = "From:[email protected]" . "\r\n";
mail($email, $subject, $message, $headers);
if ($result == 1) {
echo "Er is een email gestuurd naar " . $email . " met een link om je wachtwoord te herstellen!";
}
}
else {
//E-mail niet geregistreerd!
echo "Dit email adres is niet geregistreerd, <a href=\"login.php\">maak een account aan</a>!";
}
}
}
elseif (isset($_GET['email']) && isset($_GET['hash']) && !empty($_GET['email']) && !empty($_GET['hash'])) {
//Link in de email is ingedrukt
$email = mysqli_escape_string($mysqli, $_GET['email']);
$hash = mysqli_escape_string($mysqli, $_GET['hash']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Geen geldig e-mail adres! Ga naar de <a href=\"login.php\">registratie</a> pagina!";
}
else {
?>
<h3>Wachtwoord opnieuw instellen</h3>
<script type="text/javascript" language="JavaScript">
function checkPassword(theForm) {
if (theForm.password.value != theForm.password2.value) {
alert('De wachtwoorden komen niet overeen!');
return false;
} else {
return true;
}
}
</script>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post" onsubmit="return checkPassword(this);">
<input type="hidden" id="email" name="email" value="<?php echo $email; ?>">
<input type="hidden" id="hash" name="hash" value="<?php echo $email; ?>">
<input type="password" id="password" name="password" placeholder="Wachtwoord"><br>
<input type="password" id="password2" name="password2" placeholder="Herhaal wachtwoord"><br>
<input type="submit" name="submit" value="Verander wachtwoord!">
</form>
<?php
}
}
elseif (isset($_POST['email']) && isset($_POST['hash']) && isset($_POST['password']) && isset($_POST['password2']) && !empty($_POST['email']) && !empty($_POST['hash']) && !empty($_POST['password']) && !empty($_POST['password2'])) {
$email = mysqli_escape_string($mysqli, $_POST['email']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Geen geldig e-mail adres!";
}
else {
$hash = mysqli_escape_string($mysqli, $_POST['hash']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);
$password2 = mysqli_real_escape_string($mysqli, $_POST['password2']);
if ($password === $password2) {
$secret = password_hash($password, PASSWORD_BCRYPT);
$sql = "UPDATE login SET password='$secret' WHERE email='$email' AND hash='$hash'";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error());
if ($result == 1) {
echo "Wachtwoord veranderd! Je kunt nu <a href=\"login.php\">inloggen</a>!";
}
else {
echo "Er is iets mis gegaan!";
}
}
}
}
else {
?>
<h3>Wachtwoord opnieuw instellen</h3>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
<input type="text" id="email" name="email" placeholder="E-Mail"><br>
<input type="hidden" id="werk" name="werk" value="werk">
<input type="submit" name="submit" value="Verstuur E-Mail!"><br>
</form>
<?php
}
include 'footer.php';
?>
require 'session.php';
require 'db.php';
include 'header.php';
if (isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['werk']) && !empty($_POST['werk'])) {
//E-mail formulier is ingevuld
$email = mysqli_real_escape_string($mysqli, $_POST['email']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Geen geldig e-mail adres! Ga naar de <a href=\"login.php\">registratie</a> pagina!";
}
else {
//kijk of het email adres al voorkomt in de database
$sql = "SELECT email FROM login WHERE email = '$email'";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error());
if (mysqli_num_rows($result)) {
//Wachtwoord resetten / Maak een nieuwe hash aan
$hash = md5(rand(0,100000)); // Genereer willekeurige 32 character hash
$sql = "UPDATE login SET hash='$hash' WHERE email='$email'";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error());
$subject = "Webshop wachtwoord herstel";
$message = "Je kunt met de onderstaande link je wachtwoord herstellen.
http://www.ztjuh.tk:81/webshoptest/resetpassword.php?email=" . $email . "&hash=" . $hash;
$headers = "From:[email protected]" . "\r\n";
mail($email, $subject, $message, $headers);
if ($result == 1) {
echo "Er is een email gestuurd naar " . $email . " met een link om je wachtwoord te herstellen!";
}
}
else {
//E-mail niet geregistreerd!
echo "Dit email adres is niet geregistreerd, <a href=\"login.php\">maak een account aan</a>!";
}
}
}
elseif (isset($_GET['email']) && isset($_GET['hash']) && !empty($_GET['email']) && !empty($_GET['hash'])) {
//Link in de email is ingedrukt
$email = mysqli_escape_string($mysqli, $_GET['email']);
$hash = mysqli_escape_string($mysqli, $_GET['hash']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Geen geldig e-mail adres! Ga naar de <a href=\"login.php\">registratie</a> pagina!";
}
else {
?>
<h3>Wachtwoord opnieuw instellen</h3>
<script type="text/javascript" language="JavaScript">
function checkPassword(theForm) {
if (theForm.password.value != theForm.password2.value) {
alert('De wachtwoorden komen niet overeen!');
return false;
} else {
return true;
}
}
</script>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="post" onsubmit="return checkPassword(this);">
<input type="hidden" id="email" name="email" value="<?php echo $email; ?>">
<input type="hidden" id="hash" name="hash" value="<?php echo $email; ?>">
<input type="password" id="password" name="password" placeholder="Wachtwoord"><br>
<input type="password" id="password2" name="password2" placeholder="Herhaal wachtwoord"><br>
<input type="submit" name="submit" value="Verander wachtwoord!">
</form>
<?php
}
}
elseif (isset($_POST['email']) && isset($_POST['hash']) && isset($_POST['password']) && isset($_POST['password2']) && !empty($_POST['email']) && !empty($_POST['hash']) && !empty($_POST['password']) && !empty($_POST['password2'])) {
$email = mysqli_escape_string($mysqli, $_POST['email']);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Geen geldig e-mail adres!";
}
else {
$hash = mysqli_escape_string($mysqli, $_POST['hash']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);
$password2 = mysqli_real_escape_string($mysqli, $_POST['password2']);
if ($password === $password2) {
$secret = password_hash($password, PASSWORD_BCRYPT);
$sql = "UPDATE login SET password='$secret' WHERE email='$email' AND hash='$hash'";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error());
if ($result == 1) {
echo "Wachtwoord veranderd! Je kunt nu <a href=\"login.php\">inloggen</a>!";
}
else {
echo "Er is iets mis gegaan!";
}
}
}
}
else {
?>
<h3>Wachtwoord opnieuw instellen</h3>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
<input type="text" id="email" name="email" placeholder="E-Mail"><br>
<input type="hidden" id="werk" name="werk" value="werk">
<input type="submit" name="submit" value="Verstuur E-Mail!"><br>
</form>
<?php
}
include 'footer.php';
?>
Gewijzigd op 29/01/2016 17:12:07 door Alex Mester
Echo eens $sql, dan kan je zien de de query correct is.
Dat word ff zoeken waar het fout gegaan is
Toevoeging op 29/01/2016 17:18:28:
Ik had een stomme kopieer fout gemaakt in de <form>
Het probleem is opgelost! Bedankt!
Gewijzigd op 29/01/2016 17:20:06 door Alex Mester
Je escaped het wachtwoord voor de MySQL-context voordat je deze hasht. Dat kan mogelijk, afhankelijk van het gekozen wachtwoord, voor problemen zorgen. Het escapen dient pas te gebeuren op het moment dat / voordat deze hash in een querystring wordt opgenomen. Dit hangt natuurlijk ook mede af van hoe je controle vervolgens in elkaar zit maar het bovenstaande lijkt mij niet de goede volgorde.
Wat zou dan de juiste volgorde moeten zijn?