Lost_pass
ik ben bezig met een site, heb het login / registreer gedeelte af.. maar probeer nu dus een 'Wachtwoord vergeten" te maken... heb hier een script maar ik krijg de volgende fout melding.. :( iemand die mij verder kan helpen????? bij voorbaat dank!
No form has been submitted.
Press back to return.
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
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
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
include('conn.php');
include('transact-user.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") {
$user = $_POST['username'];
$email = $_POST['email'];
$wachtwoord = (addslashes(sha1($password)));
if(empty($gebr) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
}
$check = "SELECT * FROM users WHERE username='$user' AND email='$email'";
$docheck = mysql_query($check) or die('FOUT: '.mysql_error());
if (mysql_num_rows($docheck) == 0) {
$query1="UPDATE users SET wachtwoord='$wachtwoord' WHERE username='$user'";
mysql_query($query1);
mysql_close();
$email_ontvanger = $email;
$naam_verzender = 'MMG News';
$email_verzender = '[email protected]';
$onderwerp = 'Aanvraag nieuw wachtwoord';
$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=./index.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('conn.php');
include('transact-user.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") {
$user = $_POST['username'];
$email = $_POST['email'];
$wachtwoord = (addslashes(sha1($password)));
if(empty($gebr) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
}
$check = "SELECT * FROM users WHERE username='$user' AND email='$email'";
$docheck = mysql_query($check) or die('FOUT: '.mysql_error());
if (mysql_num_rows($docheck) == 0) {
$query1="UPDATE users SET wachtwoord='$wachtwoord' WHERE username='$user'";
mysql_query($query1);
mysql_close();
$email_ontvanger = $email;
$naam_verzender = 'MMG News';
$email_verzender = '[email protected]';
$onderwerp = 'Aanvraag nieuw wachtwoord';
$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=./index.php');
exit;
}
else {
echo 'U gegevens komen niet overeen met de gegevens in de database';
}
}
?>
Uw script staat open voor Mysql injectie. vanwege dit:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$user = $_POST['username'];
$email = $_POST['email'];
$wachtwoord = (addslashes(sha1($password)));
?>
$user = $_POST['username'];
$email = $_POST['email'];
$wachtwoord = (addslashes(sha1($password)));
?>
totaal geen controle van wat er word ingevoerd.
Bart Smulders op 05/01/2014 19:05:48:
Ik zie hier niet meteen uw formulier bij staan. kan je dat er ook even bijzetten.
Uw script staat open voor Mysql injectie. vanwege dit:
totaal geen controle van wat er word ingevoerd.
Uw script staat open voor Mysql injectie. vanwege dit:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$user = $_POST['username'];
$email = $_POST['email'];
$wachtwoord = (addslashes(sha1($password)));
?>
$user = $_POST['username'];
$email = $_POST['email'];
$wachtwoord = (addslashes(sha1($password)));
?>
totaal geen controle van wat er word ingevoerd.
Bedankt voor de tip!! hoe zou ik dit dan kunnen beveiligen??
en dit is het forumulier..
Quote:
<form method="post" action="">
<p>
Username:<br>
<input type="text" name="username" maxlength="50" value="">
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="100" value="">
</p>
<p>
<input type="submit" class="submit" name="action" value="Aanvraag N_pass">
<input type="reset" value="Reset">
</p>
</form>
<p>
Username:<br>
<input type="text" name="username" maxlength="50" value="">
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="100" value="">
</p>
<p>
<input type="submit" class="submit" name="action" value="Aanvraag N_pass">
<input type="reset" value="Reset">
</p>
</form>
Gewijzigd op 05/01/2014 19:10:01 door reduan kurtaj
Injection
<form method="post" action=""> <----- action is niet ingevuld.... Hier hoort te staan action="reset.php" of action=""
zonder dit ga je met dat formulier nergens heen.
<p>
Username:<br>
<input type="text" name="username" maxlength="50" value="">
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="100" value="">
</p>
<p>
<input type="submit" class="submit" name="action" value="Aanvraag N_pass">
<input type="reset" value="Reset">
</p>
</form>
Dit kan je tegengaan zie Tutorial <form method="post" action=""> <----- action is niet ingevuld.... Hier hoort te staan action="reset.php" of action=""
zonder dit ga je met dat formulier nergens heen.
<p>
Username:<br>
<input type="text" name="username" maxlength="50" value="">
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="100" value="">
</p>
<p>
<input type="submit" class="submit" name="action" value="Aanvraag N_pass">
<input type="reset" value="Reset">
</p>
</form>
Maar de foutmelding die gegeven wordt:
Quote:
No form has been submitted.
Press back to return.
Press back to return.
is nergens terug te vinden in geposte scripts. Mijn advies: ga eerst de letterlijk tekst van die foutmelding eens zoeken in al je scripts. Zolang je dat niet gevonden hebt is het moeilijk om het op te lossen....
Gewijzigd op 05/01/2014 19:22:10 door Erwin H
deze zat hem in het include van het bestand 'transact-users.php'
maar nu krijg ik dus de volgende fout melding...
Dit komt zeker doordat mijn 'usbwebserver' geen mail heeft???
Quote:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Users\Reduan\Desktop\USBWebserver v8.5\8.5\root\Wachtwoordvergeten.php on line 86
er is een E-mail met een nieuw wachtwoord naar u toegestuurd.
er is een E-mail met een nieuw wachtwoord naar u toegestuurd.
Toevoeging op 05/01/2014 22:09:11:
@Bart Smulders,
Mijn code aangepast... zo moet die goed zijn denk ik?
of vergeet ik de $wachtwoord regel..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$user = '' . mysql_real_escape_string($_POST['username']) . '';
$email = '' . mysql_real_escape_string($_POST['email']) . '';
$wachtwoord = (addslashes(sha1($password)));
if(empty($user) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
}
?>
if($_SERVER['REQUEST_METHOD'] == "POST") {
$user = '' . mysql_real_escape_string($_POST['username']) . '';
$email = '' . mysql_real_escape_string($_POST['email']) . '';
$wachtwoord = (addslashes(sha1($password)));
if(empty($user) || empty($email))
{
echo 'U bent iets vergeten in te vullen';
}
?>
Vergeet niet dat bij het inloggen of bv het aanmaken van een account de waarden uit de post kunnen genomen worden door kwaadwillige gebruikers. Dit houd in dat je voor je het formulier verstuurd de post waarden eerst versleutelen moet. Kijk ook eens naar xss browser hack, zeker niet onbelangerijk. Alle waarden die een gebruiker ingeeft controleren bv is een getal wel een getal ? is een mailadres wel een mail enz. en foutafhandeling. Gaat er iets fout ? geen probleem maar de gebruiker heeft geen boodschap aan could fetch.... wel aan Er ging iets fouts probeer later opnieuw of neem contact met de sitebeheerder.
Gewijzigd op 05/01/2014 22:55:36 door Bart Smulders
Die addslashes() mag je wel uit je $wachtwoord halen.
Bart Smulders op 05/01/2014 22:48:05:
Het wachtwoord is binnen je script en dus normaal gezien niet manipuleerbaar van buitenaf. Maak gebruik van prepared statements.Is het echt nodig om alles te selecteren uit een database voor een gebruikersnaam en email op te vragen? SELECT EMAIL ,USERNAME WHERE ....
Vergeet niet dat bij het inloggen of bv het aanmaken van een account de waarden uit de post kunnen genomen worden door kwaadwillige gebruikers. Dit houd in dat je voor je het formulier verstuurd de post waarden eerst versleutelen moet. Kijk ook eens naar xss browser hack, zeker niet onbelangerijk. Alle waarden die een gebruiker ingeeft controleren bv is een getal wel een getal ? is een mailadres wel een mail enz. en foutafhandeling. Gaat er iets fout ? geen probleem maar de gebruiker heeft geen boodschap aan could fetch.... wel aan Er ging iets fouts probeer later opnieuw of neem contact met de sitebeheerder.
Vergeet niet dat bij het inloggen of bv het aanmaken van een account de waarden uit de post kunnen genomen worden door kwaadwillige gebruikers. Dit houd in dat je voor je het formulier verstuurd de post waarden eerst versleutelen moet. Kijk ook eens naar xss browser hack, zeker niet onbelangerijk. Alle waarden die een gebruiker ingeeft controleren bv is een getal wel een getal ? is een mailadres wel een mail enz. en foutafhandeling. Gaat er iets fout ? geen probleem maar de gebruiker heeft geen boodschap aan could fetch.... wel aan Er ging iets fouts probeer later opnieuw of neem contact met de sitebeheerder.
Ik zal morgen avond even kijken wat ik er aan kan veranderen.. Bedankt voor de info!!
En
@-Aar-
Die addslashes() mag je wel uit je $wachtwoord halen.
Waarvoor dat dan?? Wil het best doen, zal vast beter Zijn of ergens goed voor!
Maar zou dan ook graag horen waarvoor :) leer ik ook weer van..
Greatz, Reduan
Gewijzigd op 05/01/2014 23:08:45 door - Ariën -
Zal het er uit halen en onthouden voor als er weer zoiets voorbij komt!!
Maar die fout melding die ik nu krijg?
Dat komt omdat ik geen mailserver heb??
Zo lees ik het tenminste kan zijn dat ik fout zit.
Vandaar dat ik het hier even vraag!!
Klopt, dat komt omdat je geen mailserver ingesteld hebt. Je kan vaak de SMTP van je provider gebruiken.
Waarbij ik me trouwens afvraag of regel 48 wel
if (mysql_num_rows($docheck) == 0) {
moet zijn en niet == 1
Subtieler is het om deze gegevens inderdaad te controleren,
dan in de database een veldje te vullen bij deze user
SET resetpass_requested = NOW()
En dan een link aan de user te mailen waarop hij moet klikken.
Doet hij dat, dan komt hij op een pagina waar
a) gecontroleerd wordt of resetpass_requested niet leeg is
b) maar een waarde heeft minder dan 10 minuten oid geleden
c) je presenteert de gebruiker een formpje om een nieuwe pass te geven
d) daarna sla je die pass op (waarbij je wederom controleert of we het nog steeds over dezelfde user hebben en dat we niet inmiddels 5 weken verder zijn in de tijd.
De link naar die pagina kun je eventueel ook nog onvoorspelbaar maken met een md5 code die je ook opslaat in de database bij die user.
Op deze manier wordt een password alleen veranderd als degene ook daadwerkelijk de eigenaar is van dat email adres.
Anders kun je iemand flink zieken door de hele dag door zijn password te resetten en als iemand dan niet zijn mail kan checken (zit op school, bus, trein), kan hij niets meer met zijn account op dat moment.