Klopt mijn beveiliging voor mijn login script?
Zie onderstaand mijn script, ik hoor graag of dit voldoende beveiligd is?
Groeten,
Michiel
Zie script:
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
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
<?php
// Program: Login.php
session_start();
//Indien de checkbox er voor de checkbox een cookie is geplaatst
$password = $_COOKIE['cookiepassword'];
$logname = $_COOKIE['cookielogname'];
$checkboxchecked = $_COOKIE['cookiecheckboxchecked'];
$sql = "SELECT eMailaddress, password FROM useraccount
WHERE eMailaddress ='$_POST[fusername]'";
$result = mysqli_query($cxn, $sql)or die("Couldn't execute query.");
$num = mysqli_num_rows($result);
if ($num > 0) // login name was found
{
$sql = "SELECT eMailaddress, password FROM useraccount
WHERE eMailaddress ='$_POST[fusername]'
AND password= '$_POST[fpassword]' ";
$result2 = mysqli_query($cxn, $sql)or die("Couldn't execute query 2.");
$num2 = mysqli_num_rows($result2);
if ($num2 > 0) // password is CORRECT
{
$_SESSION['auth']="yes";
$logname= mysql_real_escape_string($_POST['fusername']); //password=md5('$_POST[fpassword]')"; //oud: $logname=$_POST['fusername'];
$password= mysql_real_escape_string($_POST['fpassword']); // oud: $password=$_POST['fpassword'];
$checkboxchecked = 'checked = "checked"'; //voor cookie plaatsten voor de checkbox
$_SESSION['logname'] = $logname;
$_SESSION['password'] = $password;
$_SESSION['wo'] = $checkboxchecked; //voor cookie plaatsten voor de checkbox
$today = date("Y-m-d h:i:s");
$sql = "INSERT INTO useraccount (eMailaddress, password)
VALUES ('$logname','$today')";
$result = mysqli_query($cxn, $sql) or die("Can't execute insert query.");
//E-mailadres & Wachtwoord onthouden door cookie plaatsen!
if(isset($_POST['wo'])) // wo is voor het opslaan van de checkbox wachtwoord opslaan
{
setcookie("cookielogname", $logname, time()+600*1, "/"); //3600*1 = 1uur
setcookie("cookiepassword", $password, time()+600*1, "/"); //3600*1 = 1uur
setcookie("cookiecheckboxchecked", $checkboxchecked, time()+600*1, "/"); //3600*1 = 1uur
//$checkboxchecked = 'checked = "checked"';
}
else
{
$logname= '';
$password='';
}
header("Location: /s4new/listingrubriek-met-html-5.php?page=1");
}
else // password is NIET correct!
{
$message="<strong>Uw wachtwoord komt niet overeen </strong> met het e-mailadres, '$_POST[fusername]' ! <strong>Probeerd u het nog eens?</strong><br>";
//set a cookie
//E-mailadres onthouden indien het wachtwoord niet juist is, wachtwoord blijft leeg!
if(isset($_POST['wo'])) // wo is voor het opslaan van de checkbox wachtwoord opslaan
{
$logname= mysql_real_escape_string($_POST['fusername']);
$checkboxchecked = 'checked = "checked"';
}
else
{
$logname= mysql_real_escape_string($_POST['fusername']);
$password='';
}
include("../s4yincludes/login_form.inc");
}
}
elseif ($num == 0) // login naam NIET gevonden!
{
$message = "Het e-mailadres, <strong>'$_POST[fusername]'</strong> wat u heeft ingetypt <strong>bestaat niet! </strong>Probeerd u het nog eens?<br>";
//E-mailadres onthouden indien het wachtwoord niet juist is, wachtwoord blijft leeg!
if(isset($_POST['wo'])) // wo is voor het opslaan van de checkbox wachtwoord opslaan
{
$logname= mysql_real_escape_string($_POST['fusername']);
}
else
{
$logname= mysql_real_escape_string($_POST['fusername']);
$password='';
}
include("../s4yincludes/login_form.inc");
}
break;
default:
include("../s4yincludes/login_form.inc");
}
?>
// Program: Login.php
session_start();
//Indien de checkbox er voor de checkbox een cookie is geplaatst
$password = $_COOKIE['cookiepassword'];
$logname = $_COOKIE['cookielogname'];
$checkboxchecked = $_COOKIE['cookiecheckboxchecked'];
$sql = "SELECT eMailaddress, password FROM useraccount
WHERE eMailaddress ='$_POST[fusername]'";
$result = mysqli_query($cxn, $sql)or die("Couldn't execute query.");
$num = mysqli_num_rows($result);
if ($num > 0) // login name was found
{
$sql = "SELECT eMailaddress, password FROM useraccount
WHERE eMailaddress ='$_POST[fusername]'
AND password= '$_POST[fpassword]' ";
$result2 = mysqli_query($cxn, $sql)or die("Couldn't execute query 2.");
$num2 = mysqli_num_rows($result2);
if ($num2 > 0) // password is CORRECT
{
$_SESSION['auth']="yes";
$logname= mysql_real_escape_string($_POST['fusername']); //password=md5('$_POST[fpassword]')"; //oud: $logname=$_POST['fusername'];
$password= mysql_real_escape_string($_POST['fpassword']); // oud: $password=$_POST['fpassword'];
$checkboxchecked = 'checked = "checked"'; //voor cookie plaatsten voor de checkbox
$_SESSION['logname'] = $logname;
$_SESSION['password'] = $password;
$_SESSION['wo'] = $checkboxchecked; //voor cookie plaatsten voor de checkbox
$today = date("Y-m-d h:i:s");
$sql = "INSERT INTO useraccount (eMailaddress, password)
VALUES ('$logname','$today')";
$result = mysqli_query($cxn, $sql) or die("Can't execute insert query.");
//E-mailadres & Wachtwoord onthouden door cookie plaatsen!
if(isset($_POST['wo'])) // wo is voor het opslaan van de checkbox wachtwoord opslaan
{
setcookie("cookielogname", $logname, time()+600*1, "/"); //3600*1 = 1uur
setcookie("cookiepassword", $password, time()+600*1, "/"); //3600*1 = 1uur
setcookie("cookiecheckboxchecked", $checkboxchecked, time()+600*1, "/"); //3600*1 = 1uur
//$checkboxchecked = 'checked = "checked"';
}
else
{
$logname= '';
$password='';
}
header("Location: /s4new/listingrubriek-met-html-5.php?page=1");
}
else // password is NIET correct!
{
$message="<strong>Uw wachtwoord komt niet overeen </strong> met het e-mailadres, '$_POST[fusername]' ! <strong>Probeerd u het nog eens?</strong><br>";
//set a cookie
//E-mailadres onthouden indien het wachtwoord niet juist is, wachtwoord blijft leeg!
if(isset($_POST['wo'])) // wo is voor het opslaan van de checkbox wachtwoord opslaan
{
$logname= mysql_real_escape_string($_POST['fusername']);
$checkboxchecked = 'checked = "checked"';
}
else
{
$logname= mysql_real_escape_string($_POST['fusername']);
$password='';
}
include("../s4yincludes/login_form.inc");
}
}
elseif ($num == 0) // login naam NIET gevonden!
{
$message = "Het e-mailadres, <strong>'$_POST[fusername]'</strong> wat u heeft ingetypt <strong>bestaat niet! </strong>Probeerd u het nog eens?<br>";
//E-mailadres onthouden indien het wachtwoord niet juist is, wachtwoord blijft leeg!
if(isset($_POST['wo'])) // wo is voor het opslaan van de checkbox wachtwoord opslaan
{
$logname= mysql_real_escape_string($_POST['fusername']);
}
else
{
$logname= mysql_real_escape_string($_POST['fusername']);
$password='';
}
include("../s4yincludes/login_form.inc");
}
break;
default:
include("../s4yincludes/login_form.inc");
}
?>
, '$_POST[fusername]' ! <strong>Probeerd u het nog eens?</strong><br>";
//set a cookie
//E-mailadres onthouden indien het wachtwoord niet juist is, wachtwoord blijft leeg!
if(isset($_POST['wo'])) // wo is voor het opslaan van de checkbox wachtwoord opslaan
{
$logname= mysql_real_escape_string($_POST['fusername']);
$checkboxchecked = 'checked = "checked"';
}
else
{
$logname= mysql_real_escape_string($_POST['fusername']);
$password='';
}
include("../s4yincludes/login_form.inc");
}
}
elseif ($num == 0) // login naam NIET gevonden!
{
$message = "Het e-mailadres, <strong>'$_POST[fusername]'</strong> wat u heeft ingetypt <strong>bestaat niet! </strong>Probeerd u het nog eens?<br>";
//E-mailadres onthouden indien het wachtwoord niet juist is, wachtwoord blijft leeg!
if(isset($_POST['wo'])) // wo is voor het opslaan van de checkbox wachtwoord opslaan
{
$logname= mysql_real_escape_string($_POST['fusername']);
}
else
{
$logname= mysql_real_escape_string($_POST['fusername']);
$password='';
}
include("../s4yincludes/login_form.inc");
}
break;
default:
include("../s4yincludes/login_form.inc");
}
?>
Gewijzigd op 03/01/2012 17:16:43 door Michiel v
- variabelen buiten quotes.
- Gebruik mysql_real_escape_string() om $_GET, $_POST etc heen
- wat doet regel 6 daar?
Het begint meteen al vreemd. Je gebruikt eerst $_POST['fusername'] in je query, dan bescherm je het met mysql_real_escape_string om het daarmee in je SESSION array te zetten. Dat lijkt me niet helemaal correct. Die beveiliging wil je juist gebruiken voor je de data in een query gebruikt.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sql = "
SELECT id
FROM members
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = SHA1('" . mysql_real_escape_string ($password) . "')
";
?>
$sql = "
SELECT id
FROM members
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = SHA1('" . mysql_real_escape_string ($password) . "')
";
?>
Jens erd:
- Gebruik mysql_real_escape_string() om $_GET, $_POST etc heen
Om alle variabelen heen die een string zijn, niet alleen $_GET en $_POST. Leuk dat je veel zelfvertrouwen hebt, maar controleer ook altijd wat jij in de query voor variabelen stopt!
@ Michiel, haal regel 5 even weg en zet over code tags omheen. Dan wordt het wat leesbaarder.
Verder:
- Variabele buiten quotes, het zijn variabele en geen strings: operators.string
- Geen or die gebruiken, handel fouten netjes af: Voorbeeld.
- Regel 28 en 29 en alle andere regels, onnodig variabele kopiëren. Gebruik gewoon de $_POST variabelen, eventueel met functie, in je script en ga niet extra geheugen verspillen.
Van beveiliging van user scripts heb ik geen verstand. Dus dat laat ik aan die professionals over. (om commentaar erop te geven)
Gewijzigd op 03/01/2012 16:56:56 door Wouter J
Waarom plaats je wachtwoorden in een cookie?
Dat is alleen indien men aanvinkt om de wachtwoorden te onthouden.
Je hoort nooit, maar dan ook nooit wachtwoorden te onthouden in een cookie!
Maar je moet nooit je wachtwoord in een cookie opslaan.
Dan kan je het beter in een session doen.
$password = $_SESSION['wachtwoord'];
Wáárom zou je een wachtwoord nou in een sessie of een cookie willen plaatsen? Dat wil je nooit...
Persoonlijk heb ik een browser die in een goeie bui vaak mn wachtwoorden onthoudt.
Weet iemand waar ik een goed en veilig login script kan vinden, hier kan ik waarschijnlijk nog een hoop van leren?
Ik sla mijn wachtwoorden ook niet op in een sessie of cookie.
Ik zei het alleen maar ;)
Wat moet je nou eigenlijk met een wachtwoord cookie/sessie?
Waar voor ga je die gebruiken?
Eens de gebruiker ingelogd is, moet jij zorgen dat je in een sessie zet dat de gebruiker als "ingelogd" mag beschouwd worden. Eventueel zet je de user name ook in een sessie variabele
Maar dat paswoord heb je verder niet meer nodig. Je moet het dus nergens bijhouden.