Wachtwoord vergeten
Het moet zoals hieronder vermeld:
Ik heb er toch voor gekozen om het via een link te doen, dus gebruikers voegen hun gebruikersnaam en email in en vervolgens krijgen ze een link die 24 uur actief is, vervolgens drukken ze op die link en krijgen ze een nieuw wachtwoord toegestuurd. hoe ga ik dit realiseren.
Gewijzigd op 01/12/2011 09:04:30 door Dirk Renes
Maak 2 extra velden aan bij je users of in een koppeltabel met bijv: veiligsheidscode en verloopdatum
Dan maak je een random code die zet je in de veiligheidscode veld, en bij verloopdatum zet je de tijd van nu + 24 uur. Dan stuur je de gebruiker een url met www.mijndomein.nl/?pagina=wwvergeten&randomcode=485743957439754 op die pagina maak je een formulier met 2 inputvelden voor het nieuwe wachtwoord, en als die overeenkomen met de random code uit je url dan wijzig je hem.
Succes
Oke, heb een voorbeeldje van een script zodat ik kan zien hoe ik het beste dat kan doen.
Of je stelt een nieuw wachtwoord in als iemand zijn wachtwoord vergeten is en stuurt die naar het e-mail adres van de gebruiker?
Als de gebruiker zijn wachtwoord is vergeten dan laat ik de gebruiker een wachtwoord ontvangen met een random password.
Of stuur een link waar de gebruiker zelf zijn wachtwoord kan instellen. Nog gebruiksvriendelijker.
Dan krijg je misschien wel gezeur dat mensen wachtwoorden van anderen gaan opvragen, en dan kan je als echte gebruiker niet meer inloggen.
@aar dat bedoel ik ook ;)
http://example.com/wwvergeten?user=1&hash=030490349039
Je kan de hash iedere keer dat de gebruiker inlogd veranderen met bv sha(time()); :P
Je geeft best iedere gebruiker een hash, als ze hun wachtwoord willen veranderen stuur je gewoon een mailtje met bijvoorbeeld Je kan de hash iedere keer dat de gebruiker inlogd veranderen met bv sha(time()); :P
Internet Verslaafde op 29/11/2011 18:20:00:
Je kan de hash iedere keer dat de gebruiker inlogd veranderen met bv sha(time()); :P
Dat kan, maar ik zou het niet doen. Ik zou vanaf buitenaf lukraak getallen kunnen generen, een hash eroverheen en met een beetje geluk ook nog raak schieten. beter dus even een Salt, Pepper of een berekening er op los laten.
Ik wil het gaan doen zoals ik boven heb uitgelegd. maar hoe ga ik dat doen.
Als de hash-overeenkomt, dan laat je de gebruikers een nieuw password instellen, en als dat gebeurt is, dan verwijder je weer die hash uit je database (waarmee het linkje niet meer zal werken).
Et voila....
- Aar - op 01/12/2011 09:39:26:
Je maakt eerst een formuliertje waar men zijn username en mailadres in moet vullen. Als deze gecontroleerd zijn, genereer je een hash, welke je in de database opslaat. Ook stuur je deze hash mee in een linkje die je naar de gebruiker mailt.
Als de hash-overeenkomt, dan laat je de gebruikers een nieuw password instellen, en als dat gebeurt is, dan verwijder je weer die hash uit je database (waarmee het linkje niet meer zal werken).
Et voila....
Als de hash-overeenkomt, dan laat je de gebruikers een nieuw password instellen, en als dat gebeurt is, dan verwijder je weer die hash uit je database (waarmee het linkje niet meer zal werken).
Et voila....
Klikt simpel heb je een voorbeeldje van een scriptje dat ik me kan inbeelden met die link
Code (php)
Natuurlijk kan je ook voor alles één wachtwoord-pagina aanmaken i.p.v. het script over meerdere bestanden te verdelen, zoiets als:
wachtwoord_wijzigen.php?actie=aanvragen
wachtwoord_wijzigen.php?actie=aanpassen
Het is net wat je wilt...
Gewijzigd op 01/12/2011 10:05:03 door - Ariën -
op dit moment heb ik dit.
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
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
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
include('inc/database.php');
function createRandomPassword() {
$chars = "abcdefghijkmnopqrstuvwxyz023456789?_%@";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
$password = createrandompassword();
if($_SERVER['REQUEST_METHOD'] == "POST") {
$gebr = $_POST['gebruikersnaam'];
$email = $_POST['email'];
$nWachtwoord = (addslashes(sha1($password)));
if(empty($gebr) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
} else {
$query1="UPDATE gebruikers SET wachtwoord='$nWachtwoord' WHERE gebruikersnaam='$gebr'";
mysql_query($query1);
mysql_close();
$email_ontvanger = $email;
$naam_verzender = 'Support ';
$email_verzender = '[email protected]';
$onderwerp = '';
$bericht_verzender = 'Wachtwoord: '.$password;
$headers = "From: ".$naam_verzender." <".$email_verzender.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "Return-Path: Mail-Error <[email protected]\r\n";
$headers .= "Reply-To: ".$naam_verzender." <".$email_verzender.">\r\n";
$bericht = 'Uw wachtwoord is gereset.<br>';
$bericht .= "<br>".$bericht_verzender."<br>";
$bericht .='
<br>
<br>
<a href="link">Log in</a>
<br>
<br>
Met vriendelijke groet,<br>
Support
';
$bericht = ($bericht);
mail($email_ontvanger, $onderwerp, $bericht, $headers);
echo "er is een E-mail met een nieuw wachtwoord naar u toegestuurd. ";
header('refresh:2; url=./login.php');
}
}
?>
ini_set('display_errors', 'On');
error_reporting(E_ALL);
include('inc/database.php');
function createRandomPassword() {
$chars = "abcdefghijkmnopqrstuvwxyz023456789?_%@";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
$password = createrandompassword();
if($_SERVER['REQUEST_METHOD'] == "POST") {
$gebr = $_POST['gebruikersnaam'];
$email = $_POST['email'];
$nWachtwoord = (addslashes(sha1($password)));
if(empty($gebr) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
} else {
$query1="UPDATE gebruikers SET wachtwoord='$nWachtwoord' WHERE gebruikersnaam='$gebr'";
mysql_query($query1);
mysql_close();
$email_ontvanger = $email;
$naam_verzender = 'Support ';
$email_verzender = '[email protected]';
$onderwerp = '';
$bericht_verzender = 'Wachtwoord: '.$password;
$headers = "From: ".$naam_verzender." <".$email_verzender.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "Return-Path: Mail-Error <[email protected]\r\n";
$headers .= "Reply-To: ".$naam_verzender." <".$email_verzender.">\r\n";
$bericht = 'Uw wachtwoord is gereset.<br>';
$bericht .= "<br>".$bericht_verzender."<br>";
$bericht .='
<br>
<br>
<a href="link">Log in</a>
<br>
<br>
Met vriendelijke groet,<br>
Support
';
$bericht = ($bericht);
mail($email_ontvanger, $onderwerp, $bericht, $headers);
echo "er is een E-mail met een nieuw wachtwoord naar u toegestuurd. ";
header('refresh:2; url=./login.php');
}
}
?>
Gewijzigd op 06/12/2011 13:55:45 door Dirk Renes
empty (b)lijkt geen juiste manier om te kijken of een variabele is gevuld.
Waar om is je controle of gebruiker en mailadres overeenkomen?
Mis beveiliging bij je update-query.
Mis foutafhandeling bij je query
Na header wordt volgens mij exit; geadviseerd.
Gebruik je ook nog een salt?
Obelix en Idefix op 06/12/2011 14:09:30:
Waar om is je controle of gebruiker en mailadres overeenkomen?
Waar om is je controle of gebruiker en mailadres overeenkomen?
Hier wil ik graag antwoord op hoe ik dit het beste kan implementeren in mijns script en hoe.
Er zijn twee mogelijkheden: of bestaat of bestaat niet.
Als bestaat volgt er 1 rij, anders bestaat de combinatie niet.
Als niet bestaat --> melding 'uw gegevens zijn onbekend'.
Als bestaat --> link sturen.
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
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
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
include('inc/database.php');
function createRandomPassword() {
$chars = "abcdefghijkmnopqrstuvwxyz023456789?_%@";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
$password = createrandompassword();
if($_SERVER['REQUEST_METHOD'] == "POST") {
$gebr = $_POST['gebruikersnaam'];
$email = $_POST['email'];
$nWachtwoord = (addslashes(sha1($password)));
if(empty($gebr) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
}
$check = "SELECT * FROM gebruikers WHERE gebruikersnaam='$gebr' AND emailadres='$email'";
$docheck = mysql_query($check) or die('FOUT: '.mysql_error());
if (mysql_num_rows($docheck) == 0) {
$query1="UPDATE gebruikers SET wachtwoord='$nWachtwoord' WHERE gebruikersnaam='$gebr'";
mysql_query($query1);
mysql_close();
$email_ontvanger = $email;
$naam_verzender = '';
$email_verzender = '';
$onderwerp = '';
$bericht_verzender = 'Wachtwoord: '.$password;
$headers = "From: ".$naam_verzender." <".$email_verzender.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "Return-Path: Mail-Error <[email protected]>\r\n";
$headers .= "Reply-To: ".$naam_verzender." <".$email_verzender.">\r\n";
$bericht = 'Uw wachtwoord is gereset.<br>';
$bericht .= "<br>".$bericht_verzender."<br>";
$bericht .='
<br>
<br>
<br>
<br>
Met vriendelijke groet,<br>
';
$bericht = ($bericht);
mail($email_ontvanger, $onderwerp, $bericht, $headers);
echo "er is een E-mail met een nieuw wachtwoord naar u toegestuurd. ";
header('refresh:2; url=./login.php');
exit;
}
else {
echo 'U gegevens komen niet overeen met de gegevens in de database';
}
}
?>
ini_set('display_errors', 'On');
error_reporting(E_ALL);
include('inc/database.php');
function createRandomPassword() {
$chars = "abcdefghijkmnopqrstuvwxyz023456789?_%@";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
$password = createrandompassword();
if($_SERVER['REQUEST_METHOD'] == "POST") {
$gebr = $_POST['gebruikersnaam'];
$email = $_POST['email'];
$nWachtwoord = (addslashes(sha1($password)));
if(empty($gebr) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
}
$check = "SELECT * FROM gebruikers WHERE gebruikersnaam='$gebr' AND emailadres='$email'";
$docheck = mysql_query($check) or die('FOUT: '.mysql_error());
if (mysql_num_rows($docheck) == 0) {
$query1="UPDATE gebruikers SET wachtwoord='$nWachtwoord' WHERE gebruikersnaam='$gebr'";
mysql_query($query1);
mysql_close();
$email_ontvanger = $email;
$naam_verzender = '';
$email_verzender = '';
$onderwerp = '';
$bericht_verzender = 'Wachtwoord: '.$password;
$headers = "From: ".$naam_verzender." <".$email_verzender.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "Return-Path: Mail-Error <[email protected]>\r\n";
$headers .= "Reply-To: ".$naam_verzender." <".$email_verzender.">\r\n";
$bericht = 'Uw wachtwoord is gereset.<br>';
$bericht .= "<br>".$bericht_verzender."<br>";
$bericht .='
<br>
<br>
<br>
<br>
Met vriendelijke groet,<br>
';
$bericht = ($bericht);
mail($email_ontvanger, $onderwerp, $bericht, $headers);
echo "er is een E-mail met een nieuw wachtwoord naar u toegestuurd. ";
header('refresh:2; url=./login.php');
exit;
}
else {
echo 'U gegevens komen niet overeen met de gegevens in de database';
}
}
?>
Gewijzigd op 16/12/2011 15:10:31 door Dirk Renes
Code (php)
Hier check je of de gegevens zijn ingevuld (waarbij je de POST variabele niet controleert of die bestaan dus je script zou al eerder over zijn nek kunnen zijn gegaan). Maar omdat er geen } achter staat, staat het hele volgende blok binnen het if statement. Dus je hele check op bestaande gegevens wordt alleen uitgevoerd als er gegevens ontbreken..... volgens mij klopt dat niet helemaal.
Erwin H op 16/12/2011 14:50:14:
Hier check je of de gegevens zijn ingevuld (waarbij je de POST variabele niet controleert of die bestaan dus je script zou al eerder over zijn nek kunnen zijn gegaan). Maar omdat er geen } achter staat, staat het hele volgende blok binnen het if statement. Dus je hele check op bestaande gegevens wordt alleen uitgevoerd als er gegevens ontbreken..... volgens mij klopt dat niet helemaal.
Code (php)
Hier check je of de gegevens zijn ingevuld (waarbij je de POST variabele niet controleert of die bestaan dus je script zou al eerder over zijn nek kunnen zijn gegaan). Maar omdat er geen } achter staat, staat het hele volgende blok binnen het if statement. Dus je hele check op bestaande gegevens wordt alleen uitgevoerd als er gegevens ontbreken..... volgens mij klopt dat niet helemaal.
Dit probleem is nu opgelost, die if staat nu los. nu krijg ik dus als ik niks invul dat de gegevens niet overeenkomen of leeg zijn.
Hoe is die if structuur nu opgebouwd dan?