Wachtwoord vergeten mailen
ik kan nergens vinden wat de email code is
heeft iemand misschien een klein opstapje voor mij ?
dit heb ik tot nu toe
alvst bedankt
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
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
<?php
$errors = array();
ini_set('display_errors', 'On');
error_reporting (E_ALL);
if( $_SERVER['REQUEST_METHOD'] == 'POST'){
$query=("SELECT email, wachtwoord FROM members WHERE email='".($_POST['email'])."'");
$result = mysql_query($query);
$gebruiker = mysql_num_rows($result);
if ($result == false AND mysql_num_rows($gebruiker)== 0);
$errors[] = 'Er is iets fout gegaan';
}
else{
$email = mysql_real_escape_string($gebruiker['email']);
$wachtwoord = mysql_real_escape_string($gebruiker['wachtwoord']);
mail ($email, $wachtwoord);
echo'Uw wachtwoord is verstuurd';
foreach($errors AS $err){
//errors tonen
echo $err.'<br/>';
}
}
?>
$errors = array();
ini_set('display_errors', 'On');
error_reporting (E_ALL);
if( $_SERVER['REQUEST_METHOD'] == 'POST'){
$query=("SELECT email, wachtwoord FROM members WHERE email='".($_POST['email'])."'");
$result = mysql_query($query);
$gebruiker = mysql_num_rows($result);
if ($result == false AND mysql_num_rows($gebruiker)== 0);
$errors[] = 'Er is iets fout gegaan';
}
else{
$email = mysql_real_escape_string($gebruiker['email']);
$wachtwoord = mysql_real_escape_string($gebruiker['wachtwoord']);
mail ($email, $wachtwoord);
echo'Uw wachtwoord is verstuurd';
foreach($errors AS $err){
//errors tonen
echo $err.'<br/>';
}
}
?>
Stefan H op 02/08/2012 21:17:43:
ik kan nergens vinden wat de email code is
Je mail mist headers. Kijk naar phpmailer / swiftmailer om zelf niet het wiel opnieuw uit te hoeven vinden.
Als iemand zijn/haar wachtwoord wil opvragen, mail je een random code.
Reden: je hebt het wachtwoord versleuteld opgeslagen in je database en kunt het (daarom) niet terug 'vertalen'. Of heb je het niet beveiligd opgeslagen?? In dat geval zou ik dat alsnog in orde gaan maken.
Ten aanzien van je code:
Query is lek.
Je mist foutafhandeling.
Mij is onduidelijk wat je op regel 13 doet en daarna het AND gedeelte op regel 15.
Zou er voor kiezen dat mysql_num_rows = 1 --> alleen dan is er 1 resultaat gevonden.
mysql_real_escape_string gebruik je bij een query, niet om tekst te beveiligen in een mail.
Gewijzigd op 02/08/2012 21:28:47 door Obelix Idefix
$query = "SELECT email, wachtwoord FROM members WHERE email='".mysql_real_escape_string($_POST['email']))."'";
Sorry, ik zag het nut van de ( en ) niet, misschien was het wel beter geweest, maar ik vertel alleen mijn mening.
Regel 15 kun je beter in 2e delen:
if ($result === false)
{
$errors[] = 'Er is iets fout gegaan';
}
if (mysql_num_rows($gebruiker)== 0)
{
$errors[] = 'Er is iets fout gegaan';
}
En dan met een afsluiting van je eigen fanatasie.
Want wat er nu gebeurt is, dat wanneer de query goed is, maar de gebruiker niet bestaat, het script toch denkt dat het goed bezig is en de foutmelding overslaat.
Obelix heeft al het andere al genoemt en dat zal ik daarom niet herhalen.
De pagina waar men op terecht komt na het drukken op 'wachtwoord vergeten'
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
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
<?php
include("header.php");
if (isset($_POST['bevestignw'])) {
$email = protect($_POST['emailadres']);
$gebr_get = mysql_query("SELECT * FROM gebr WHERE email='$email'") or die(mysql_error());
if (mysql_num_rows($gebr_get) == 0) {
output("Er is geen gebruiker geregistreerd met dit e-mailadres.");
}
else {
$wachtwoord = uniqid(rand());
$gebr = mysql_fetch_assoc($gebr_get);
$voornaam = $gebr['voornaam'];
$bericht = "Hallo $voornaam\n\nIemand (vermoedelijk jij) heeft een nieuw wachtwoord aangevraagd voor je account op naam.be, je oude wachtwoord is dus niet meer geldig, vanaf nu kan je dus inloggen met dit nieuwe wachtwoord. Mocht je niet tevreden zijn met dit nieuwe wachtwoord, dan kan je je wachtwoord veranderen, onder 'instellingen'.\n\nJe nieuwe wachtwoord: $wachtwoord\n\nMet vriendelijke Groeten\nHet naam.be team";
$header = "From: ' naam' <'[email protected]'>";
$sentemail=mail($email,'Een nieuw wachtwoord',$bericht,$header);
//als de email succesvol is verzonden
if($sentemail) {
output("Een nieuw wachtwoord werd naar je e-mailadres gezonden.");
}
else {
output("We hebben je niet kunnen aanmelden, probeer opnieuw.");
}
$nwachtwoord = md5($wachtwoord);
$inv1 = mysql_query("UPDATE gebr SET wachtwoord='$nwachtwoord' WHERE email='$email'");
}
}
?>
<h2>Wachtwoord vergeten</h2>
<p>Vul hieronder je e-mailadres in, dan zenden we je een nieuw wachtwoord toe.</p>
<form action="" method="post">
<input type="text" name="emailadres" maxlength="100" /><br />
<input type="submit" name="bevestignw" value="Nieuw wachtwoord" />
</form>
<?php
include("footer.php");
?>
include("header.php");
if (isset($_POST['bevestignw'])) {
$email = protect($_POST['emailadres']);
$gebr_get = mysql_query("SELECT * FROM gebr WHERE email='$email'") or die(mysql_error());
if (mysql_num_rows($gebr_get) == 0) {
output("Er is geen gebruiker geregistreerd met dit e-mailadres.");
}
else {
$wachtwoord = uniqid(rand());
$gebr = mysql_fetch_assoc($gebr_get);
$voornaam = $gebr['voornaam'];
$bericht = "Hallo $voornaam\n\nIemand (vermoedelijk jij) heeft een nieuw wachtwoord aangevraagd voor je account op naam.be, je oude wachtwoord is dus niet meer geldig, vanaf nu kan je dus inloggen met dit nieuwe wachtwoord. Mocht je niet tevreden zijn met dit nieuwe wachtwoord, dan kan je je wachtwoord veranderen, onder 'instellingen'.\n\nJe nieuwe wachtwoord: $wachtwoord\n\nMet vriendelijke Groeten\nHet naam.be team";
$header = "From: ' naam' <'[email protected]'>";
$sentemail=mail($email,'Een nieuw wachtwoord',$bericht,$header);
//als de email succesvol is verzonden
if($sentemail) {
output("Een nieuw wachtwoord werd naar je e-mailadres gezonden.");
}
else {
output("We hebben je niet kunnen aanmelden, probeer opnieuw.");
}
$nwachtwoord = md5($wachtwoord);
$inv1 = mysql_query("UPDATE gebr SET wachtwoord='$nwachtwoord' WHERE email='$email'");
}
}
?>
<h2>Wachtwoord vergeten</h2>
<p>Vul hieronder je e-mailadres in, dan zenden we je een nieuw wachtwoord toe.</p>
<form action="" method="post">
<input type="text" name="emailadres" maxlength="100" /><br />
<input type="submit" name="bevestignw" value="Nieuw wachtwoord" />
</form>
<?php
include("footer.php");
?>
Gewijzigd op 02/08/2012 22:05:12 door Louis Deconinck
@Louis: Ook jouw script is lek => SQL-Injection is mogelijk.
hoe kan ik dit verhelpen ?
alvast bedankt
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
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
<?php
include ('layout.php');
include ('config.php');
$errors = array();
ini_set('display_errors', 'On');
error_reporting (E_ALL);
if( $_SERVER['REQUEST_METHOD'] == 'POST'){
$query=("SELECT email, wachtwoord FROM members WHERE email='".mysql_real_escape_string($_POST['email']))."'";
$result = mysql_query($query);
$gebruiker = mysql_num_rows($result);
if ($result === false){
echo'Er is iets fout gegaan';
}
if (mysql_num_rows($gebruiker) === 0){
echo 'Er is iets fout gegaan';
}
else{
$wachtwoord = ($gebruiker['wachtwoord']);
$bericht = "Hallow hier is uw wachtwoord dat u vergeten was.('".$wachtwoord."')";
$sentemail =mail ($email, 'Een nieuw wachtwoord' ,$bericht ,$headers);
if($sentemail){
echo'Uw wachtwoord is verstuurd';
}
}
}
?>
include ('layout.php');
include ('config.php');
$errors = array();
ini_set('display_errors', 'On');
error_reporting (E_ALL);
if( $_SERVER['REQUEST_METHOD'] == 'POST'){
$query=("SELECT email, wachtwoord FROM members WHERE email='".mysql_real_escape_string($_POST['email']))."'";
$result = mysql_query($query);
$gebruiker = mysql_num_rows($result);
if ($result === false){
echo'Er is iets fout gegaan';
}
if (mysql_num_rows($gebruiker) === 0){
echo 'Er is iets fout gegaan';
}
else{
$wachtwoord = ($gebruiker['wachtwoord']);
$bericht = "Hallow hier is uw wachtwoord dat u vergeten was.('".$wachtwoord."')";
$sentemail =mail ($email, 'Een nieuw wachtwoord' ,$bericht ,$headers);
if($sentemail){
echo'Uw wachtwoord is verstuurd';
}
}
}
?>
$query=("SELECT email,
eens in dit:
$query="SELECT email,
en waar zijn je headers?
Maar weet je misschien waardoor ik de internal 500 error krijg ? Weet ook niet wat het betekent.?
is het nu niet opgelost dan? door het haakje weg te halen
Stefan H op 02/08/2012 22:42:09:
Maar weet je misschien waardoor ik de internal 500 error krijg ? Weet ook niet wat het betekent.?
Zo te zien niet door dit script.
Misschien dat er iets in de include()'s zit, dat kan ik niet zien.
Raadpleeg de error file eens van Apache.
Dit gebruik ik:
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
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
<?php
// wachtwoord vergeten?
if($_GET['case'] == 'forgot_password')
{
$form = '<p><b>Wat is uw emailadres?</b></p>
<form action="cms/?forgot" method="post">
<input type="text" name="email" value="">
<input type="submit" value="Vraag nieuw wachtwoord aan" class="submit">
</form>';
if(!isset($_POST['email']) OR $_POST['email'] == '')
{
echo '
<h3>Reset uw wachtwoord</h3>
<p>U bent uw wachtwoord vergeten.<br>
Geen probleem, maak ik even een nieuwe voor je aan.<br>
Dit nieuwe wachtwoord ontvang je dan op je (opgegeven) emailadres.</p>';
echo $form;
}
else
{
if(!is_email($_POST['email']))
{
echo '<h3>Reset uw wachtwoord</h3>
<p class="letop_fout">Het ingevulde wachtwoord is helaas geen geldig emailadres.<br>
Probeer het nog eens.</p>';
echo str_replace('value=""', 'value="'.$_POST['email'].'"', $form);
}
else
{
$email = mres($_POST['email']);
$res = sql("SELECT gebruikersnaam FROM leden WHERE emailadres = '".$email."' LIMIT 1");
if($res !== false)
{
$gebruikersnaam = $res[0]['gebruikersnaam'];
$random = random_hash(10);
$wachtwoord = ecrypt($random);
// werk database bij
$update = sql("UPDATE leden SET wachtwoord_hash = '".$wachtwoord."' WHERE emailadres = '".$email."';");
$to = $email;
$subject = "Uw wachtwoord is opnieuw ingesteld";
$message = '
<html>
<head>
<title>'.$subject.'</title>
</head>
<body>
<p>Beste '.$gebruikersnaam.',<br>
<br>
Hieronder staat uw nieuwe wachtwoord voor uw accuont van <a href="www.http://hervormdegemeentebovenhardinxveld.nl">www.hervormdegemeentebovenhardinxveld.nl</a>.<br>
<br>
<span style="font-size: 150%;">Uw nieuwe wachtwoord is: <b>'.$random.'</b></span><br>
<br>
Mochten er vragen zijn, dan verneem ik die graag via <a href="mailto:[email protected]">[email protected]</a>.<br>
<br>
Met vriendelijke groet,<br>
<br>
De Webmaster van de Hervormde Gemeente te Boven-Hardinxveld</p>
</body>
</html>
';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: '.$gebruikersnaam.' <'.$emailadres.'>' . "\r\n";
$headers .= 'From: Activatie Hervormde Gemeente Boven-Hardinxveld <[email protected]>' . "\r\n";
//$headers .= 'Cc: [email protected]' . "\r\n";
mail($to, $subject, $message, $headers);
// force logout
unset($_SESSION['login']);
unset($_SEESSION);
echo '<p class="letop_goed">Nieuw wachtwoord is ingesteld!</p>';
echo '<br>Er is een email naar <b>'.$email.'</b> gestuurd met daarin uw nieuwe wachtwoord.<br>
Daarmee kunt u direct inloggen en uw wachtwoord opnieuw instellen.<br>
<br>
We raden u aan direct uw wachtwoord te wijzigen naar makkelijker te onthouden wachtwoord.<br>
<br>
<br>
<a href="login/" class="pijltje">Log in met uw nieuwe wachtwoord</a>
<br>
U wordt over <span id="timer">10</span> seconden naar het inlogformuler gestuurd.
<meta http-equiv="refresh" content="10;URL=login/">
';
}
else
{
echo '<p class="letop_fout">Dit emailadres is niet bekend. <'.__LINE__.'></p>';
echo str_replace('value=""', 'value="'.$_POST['email'].'"', $form);
}
}
}
}
?>
// wachtwoord vergeten?
if($_GET['case'] == 'forgot_password')
{
$form = '<p><b>Wat is uw emailadres?</b></p>
<form action="cms/?forgot" method="post">
<input type="text" name="email" value="">
<input type="submit" value="Vraag nieuw wachtwoord aan" class="submit">
</form>';
if(!isset($_POST['email']) OR $_POST['email'] == '')
{
echo '
<h3>Reset uw wachtwoord</h3>
<p>U bent uw wachtwoord vergeten.<br>
Geen probleem, maak ik even een nieuwe voor je aan.<br>
Dit nieuwe wachtwoord ontvang je dan op je (opgegeven) emailadres.</p>';
echo $form;
}
else
{
if(!is_email($_POST['email']))
{
echo '<h3>Reset uw wachtwoord</h3>
<p class="letop_fout">Het ingevulde wachtwoord is helaas geen geldig emailadres.<br>
Probeer het nog eens.</p>';
echo str_replace('value=""', 'value="'.$_POST['email'].'"', $form);
}
else
{
$email = mres($_POST['email']);
$res = sql("SELECT gebruikersnaam FROM leden WHERE emailadres = '".$email."' LIMIT 1");
if($res !== false)
{
$gebruikersnaam = $res[0]['gebruikersnaam'];
$random = random_hash(10);
$wachtwoord = ecrypt($random);
// werk database bij
$update = sql("UPDATE leden SET wachtwoord_hash = '".$wachtwoord."' WHERE emailadres = '".$email."';");
$to = $email;
$subject = "Uw wachtwoord is opnieuw ingesteld";
$message = '
<html>
<head>
<title>'.$subject.'</title>
</head>
<body>
<p>Beste '.$gebruikersnaam.',<br>
<br>
Hieronder staat uw nieuwe wachtwoord voor uw accuont van <a href="www.http://hervormdegemeentebovenhardinxveld.nl">www.hervormdegemeentebovenhardinxveld.nl</a>.<br>
<br>
<span style="font-size: 150%;">Uw nieuwe wachtwoord is: <b>'.$random.'</b></span><br>
<br>
Mochten er vragen zijn, dan verneem ik die graag via <a href="mailto:[email protected]">[email protected]</a>.<br>
<br>
Met vriendelijke groet,<br>
<br>
De Webmaster van de Hervormde Gemeente te Boven-Hardinxveld</p>
</body>
</html>
';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: '.$gebruikersnaam.' <'.$emailadres.'>' . "\r\n";
$headers .= 'From: Activatie Hervormde Gemeente Boven-Hardinxveld <[email protected]>' . "\r\n";
//$headers .= 'Cc: [email protected]' . "\r\n";
mail($to, $subject, $message, $headers);
// force logout
unset($_SESSION['login']);
unset($_SEESSION);
echo '<p class="letop_goed">Nieuw wachtwoord is ingesteld!</p>';
echo '<br>Er is een email naar <b>'.$email.'</b> gestuurd met daarin uw nieuwe wachtwoord.<br>
Daarmee kunt u direct inloggen en uw wachtwoord opnieuw instellen.<br>
<br>
We raden u aan direct uw wachtwoord te wijzigen naar makkelijker te onthouden wachtwoord.<br>
<br>
<br>
<a href="login/" class="pijltje">Log in met uw nieuwe wachtwoord</a>
<br>
U wordt over <span id="timer">10</span> seconden naar het inlogformuler gestuurd.
<meta http-equiv="refresh" content="10;URL=login/">
';
}
else
{
echo '<p class="letop_fout">Dit emailadres is niet bekend. <'.__LINE__.'></p>';
echo str_replace('value=""', 'value="'.$_POST['email'].'"', $form);
}
}
}
}
?>
Let wel even op dat ik een paar eigen functies gebruik:
mres() = mysql_real_escape_string()
is_email() = controleert of string een geldig emailadres is
random_hash() = maakt aantal tekens aan (in haakjes is lengte van die string)
- SanThe - op 02/08/2012 22:17:19:
@Louis: Ook jouw script is lek => SQL-Injection is mogelijk.
Waar dan? Want de input wordt toch beveiligd op regel 4 protect, is een functie die geincluded wordt doormiddel van de header:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function protect($string) {
return mysql_real_escape_string(strip_tags(addslashes($string)));
}
?>
function protect($string) {
return mysql_real_escape_string(strip_tags(addslashes($string)));
}
?>
Gewijzigd op 03/08/2012 11:14:23 door Louis Deconinck
Wat me in ieder geval opvalt en wat niet klopt:
14: $gebruiker = mysql_num_rows($result);
...
20: if (mysql_num_rows($gebruiker) === 0){
weet iemand hoe ik dit kan voor komen ?
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
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
<?php
include ('layout.php');
include ('config.php');
include ('headers.php');
$errors = array();
ini_set('display_errors', 'On');
error_reporting (E_ALL);
if( $_SERVER['REQUEST_METHOD'] == 'POST'){
$query="SELECT email, wachtwoord FROM members WHERE email='".mysql_real_escape_string($_POST['email'])."'";
$result = mysql_query($query);
if($gebruiker = mysql_num_rows($result)===0){;
echo'Er is iets fout gegaan';
}
else{
$wachtwoord = ($gebruiker['wachtwoord']);
$usermail = ($_POST['email']);
$bericht = "Hallow hier is uw wachtwoord dat u vergeten was.('".$wachtwoord."')";
$sentemail =mail ($usermail, 'Een nieuw wachtwoord' ,$bericht ,$headers);
if($sentemail){
echo'Uw wachtwoord is verstuurd';
}
}
}
?>
include ('layout.php');
include ('config.php');
include ('headers.php');
$errors = array();
ini_set('display_errors', 'On');
error_reporting (E_ALL);
if( $_SERVER['REQUEST_METHOD'] == 'POST'){
$query="SELECT email, wachtwoord FROM members WHERE email='".mysql_real_escape_string($_POST['email'])."'";
$result = mysql_query($query);
if($gebruiker = mysql_num_rows($result)===0){;
echo'Er is iets fout gegaan';
}
else{
$wachtwoord = ($gebruiker['wachtwoord']);
$usermail = ($_POST['email']);
$bericht = "Hallow hier is uw wachtwoord dat u vergeten was.('".$wachtwoord."')";
$sentemail =mail ($usermail, 'Een nieuw wachtwoord' ,$bericht ,$headers);
if($sentemail){
echo'Uw wachtwoord is verstuurd';
}
}
}
?>
Wat is "ongenste mail"? Wordt de mail verstuurd of niet?
heb je een idee wat ik fout doet bij de query ofzo dat het wachtwoord er niet uitkomt ?
ook komt er waar het wachtwoord hoort te staanhet volgende te staan ('s')
de variabelen leest hij dus als een S wat vreemd is denk ik ?
Gewijzigd op 03/08/2012 17:14:59 door stefan H
14: $result = mysql_query($query);
een regel:
$rij = mysql_fetch_assoc($result);
Dat zorgt dat de opgehaalde rij in een array wordt gezet.
Bij het versturen van de e-mail gebruik je dan:
$rij['wachtwoord']
in plaats van $gebruiker['wachtwoord']
alleen komt hij nog in de ongewenste mail iemand daar een idee over ?
Zo te zien nergens... dan werkt het inderdaad niet.
heb je misschien een idee waarom hij in de ongewenste mail komt?