Veilig inlog script?
Ik heb een inlogscript gemaakt maar ik vraag mij af of hij nu veilig is. Zo nee wil je dan precies opschrijven wat ik verkeerd doe en hoe ik het oplos? Nog een vraag.. Programmeer ik nu zo overzichtelijk of zijn daar ook nog dingen aan de verbeteren?
Groetjes, (hier onder het 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
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
<?php
session_start();
include_once('config.php');
?>
<html>
<head>
<title>Client login</title>
</head>
<body>
<form method="POST">
<table>
<tr>
<td>Naam </td><td><input type="text" name="naam" size="" ></td>
</tr>
<tr>
<td>Wachtwoord </td><td><input type="password" name="wachtwoord" value=""></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Aanmelden"></td>
</tr>
</table>
</form>
</body>
</html>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!empty($_POST['naam']))
{
if(!empty($_POST['wachtwoord']))
{
if(!empty($_POST['naam']) && !empty($_POST['wachtwoord']))
{
$query_control = mysql_query("SELECT * FROM members WHERE naam='".mysql_real_escape_string($_POST['naam'])."' AND wachtwoord='".mysql_real_escape_string($_POST['wachtwoord'])."' AND actief='".intval(1)."'");
if($query_control)
{
if(mysql_num_rows($query_control) > 0)
{
while($session = mysql_fetch_assoc($query_control))
{
$_SESSION['username'] = $session['naam'];
$_SESSION['email'] = $session['email'];
$_SESSION['userdatum'] = $session['datum'];
$_SESSION['userid'] = $session['id'];
$_SESSION['userlvl'] = $session['level'];
$_SESSION['useractief'] = $session['actief'];
$_SESSION['voornaam'] = $session['voornaam'];
$_SESSION['achternaam'] = $session['achternaam'];
$_SESSION['tussenvoegsel'] = $session['tussenvoegsel'];
$_SESSION['straat'] = $session['straat'];
$_SESSION['nummer'] = $session['nummer'];
$_SESSION['postcode'] = $session['postcode'];
$_SESSION['woonplaats'] = $session['woonplaats'];
$_SESSION['telefoon'] = $session['tel'];
$_SESSION['geslacht'] = $session['geslacht'];
$_SESSION['voorletters'] = $session['voorletters'];
}
header("location: logged_in.php");
}
else
{
echo '<div id="login_false">Foutieve inlog gegevens!</div>';
}
}
else
{
echo '<div id="login_false">Er is een onbekende fout opgetreden, neem contact op met de beheerder</div>';
}
}
else
{
echo '<div id="login_false">Geen gebruikersnaam en wachtwoord ingevoerd!</div>';
}
}
else
{
echo '<div id="login_false">Geen wachtwoord ingevuld!</div>';
}
}
else
{
echo '<div id="login_false">Geen gebruikersnaam ingevuld!</div>';
}
}
?>
session_start();
include_once('config.php');
?>
<html>
<head>
<title>Client login</title>
</head>
<body>
<form method="POST">
<table>
<tr>
<td>Naam </td><td><input type="text" name="naam" size="" ></td>
</tr>
<tr>
<td>Wachtwoord </td><td><input type="password" name="wachtwoord" value=""></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Aanmelden"></td>
</tr>
</table>
</form>
</body>
</html>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!empty($_POST['naam']))
{
if(!empty($_POST['wachtwoord']))
{
if(!empty($_POST['naam']) && !empty($_POST['wachtwoord']))
{
$query_control = mysql_query("SELECT * FROM members WHERE naam='".mysql_real_escape_string($_POST['naam'])."' AND wachtwoord='".mysql_real_escape_string($_POST['wachtwoord'])."' AND actief='".intval(1)."'");
if($query_control)
{
if(mysql_num_rows($query_control) > 0)
{
while($session = mysql_fetch_assoc($query_control))
{
$_SESSION['username'] = $session['naam'];
$_SESSION['email'] = $session['email'];
$_SESSION['userdatum'] = $session['datum'];
$_SESSION['userid'] = $session['id'];
$_SESSION['userlvl'] = $session['level'];
$_SESSION['useractief'] = $session['actief'];
$_SESSION['voornaam'] = $session['voornaam'];
$_SESSION['achternaam'] = $session['achternaam'];
$_SESSION['tussenvoegsel'] = $session['tussenvoegsel'];
$_SESSION['straat'] = $session['straat'];
$_SESSION['nummer'] = $session['nummer'];
$_SESSION['postcode'] = $session['postcode'];
$_SESSION['woonplaats'] = $session['woonplaats'];
$_SESSION['telefoon'] = $session['tel'];
$_SESSION['geslacht'] = $session['geslacht'];
$_SESSION['voorletters'] = $session['voorletters'];
}
header("location: logged_in.php");
}
else
{
echo '<div id="login_false">Foutieve inlog gegevens!</div>';
}
}
else
{
echo '<div id="login_false">Er is een onbekende fout opgetreden, neem contact op met de beheerder</div>';
}
}
else
{
echo '<div id="login_false">Geen gebruikersnaam en wachtwoord ingevoerd!</div>';
}
}
else
{
echo '<div id="login_false">Geen wachtwoord ingevuld!</div>';
}
}
else
{
echo '<div id="login_false">Geen gebruikersnaam ingevuld!</div>';
}
}
?>
1. Is het wachtwoord niet versleuteld opgeslagen met mbv md5 of sha
2. Waarom niet alleen 1 sessie met het id van de gebruiker. Dan zijn alle andere gegevens zo op te halen.
3. Eerst controleren of de naam niet leeg is, dan controleren of het ww niet leeg is en dan controleren of ze allebei niet leeg zijn.. i don't get the point of that.
4. Actief een beetje ongelukkig gekozen naam. Actief zou ook kunnen betekenen 'online'. Iets als status of geactiveerd zou mogelijk mooier/beter op zijn plaats zijn.
5. het werkt niet, want de header kan niet verstuurd worden lijkt mij.
6. SELECT * FROM ... waarom alle velden? je wil alleen weten hoeveel resultaten er zijn, en je wilt alleen het id in een sessie zetten (zie 2)
7 Je gebruikt niet consequente naamgeving. De tabel heet members (engels) en de velden zijn dan weer naam en wachtwoord..
Gewijzigd op 01/01/1970 01:00:00 door Citroen Anoniem Graag
Dit snap ik niet:
actief='".intval(1)."'
1 is een constante INT. Hier doe je intval over, terwijl het al een INT is en het wordt toch niet als int gestuurd naar de DB (voor zover ik weet). Daar komt de string dacht ik gewoon aan als string en daar wordt het behandeld zoals het behandeld moet worden.
<form method="POST">
Wat dacht je van een action="" ?
Bedankt voor reactie!
1 Dat heb ik gedaan.. Ik was het helemaal vergeten
2 Heb ik ook verwerkt.. Maar ik dacht dat het sneller was..
3 Ow jah dat is dom. Die kan ik beter als eerste doen zeker?
4 ik zal eens kijken wat ik dan zal kiezen
5 Ja het werkt wel:P
6 Heb ik veranderd in naam en wachtwoord..
7 OKé, maar is dat zo erg dan?
@miloan
Allereerst bedankt voor je reactie..
Oké dus die intval mag daar gewoon weg en er hoeft niks voor in de plaats?
Over dat action.. Is dat nou echt nodig? Ik heb het er wel bij gezet nu maar het is toch alleen nodig als je naar een andere pagina verwijst?
@antwoorders
Ik zal jullie commentaar verwerken en hem aanpassen en hem dan weer opnieuw posten.
Groetjes
Ik snap het tnx:)