Hallo allemaal,
Ik ben al een tijdje bezig met een site met een inlogsysteem. Ook werk ik met rechten (Iemand met admin-rechten kan meer dingen doen dan iemand met mod-rechten).
Heel het inlogsysteem werkt nu, alleen omdat ik nog nooit een inlogsysteem gemaakt hebt, weet ik niet zeker of dat het wel veilig is. Wat denken jullie?
Dit is het inlogscript:
Op iedere pagina require ik dit script:
Om te kijken of een gebruiker toegang heeft tot de pagina, gebruik ik dit script:
(hoe lager het ACL-level, hoe meer toegang je hebt)
Dit is de database-table waarin de user-informatie staat:
Bedankt
Ik ben al een tijdje bezig met een site met een inlogsysteem. Ook werk ik met rechten (Iemand met admin-rechten kan meer dingen doen dan iemand met mod-rechten).
Heel het inlogsysteem werkt nu, alleen omdat ik nog nooit een inlogsysteem gemaakt hebt, weet ik niet zeker of dat het wel veilig is. Wat denken jullie?
Dit is het inlogscript:
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
105
| <?php require('config.php'); //controleren of dat er al ingelogd is if (isset($_SESSION['password']) && $_GET['q'] != "logout") { //terug naar de homepage header ("location: ucp.php"); exit; } session_start(); //Inloggen if ($_GET['ver'] == "true") { $username = mysql_real_escape_string($_POST['username']); $password = md5($_POST['password']); $query = mysql_query("SELECT * FROM Users WHERE username='".$username."' AND password='".$password."'"); if (mysql_num_rows($query) == "1") { //Access level toekennen. while($row = mysql_fetch_array($query)) { $_SESSION['uid'] = $row['uid']; $_SESSION['acl'] = $row['acl']; $_SESSION['username'] = $row['username']; } $_SESSION['password'] = $password; $_SESSION['ua'] = $_SERVER['HTTP_USER_AGENT']; header("location: ucp.php"); //indien gewenst, cookies instellen if (isset($_POST['setcookie'])) { setcookie("username", "".$_SESSION['username']."", time()+60*60*24*31); setcookie("password", "".$_SESSION['password']."", time()+60*60*24*31); setcookie("uid", "".$_SESSION['uid']."", time()+60*60*24*31); } } else { //wachtwoord of username fout? $msg = "<p>Het wachtwoord of de gebruikersnaam is ongeldig.</p>"; } } //uitloggen if ($_GET['q'] == "logout") { session_destroy(); // cookies laten verlopen als ze bestaan setcookie("uid", "", time()-3600); setcookie("username", "", time()-3600); setcookie("password", "", time()-3600); $msg = "<p>U bent uitgelogd.</p>"; } ?> <?php echo $msg; ?> <form action="ucp.php?q=login&ver=true" method="post"> <p>Gebruikersnaam:<br /> <input type="text" name="username"></p> <p>Wachtwoord:<br /> <input name="password" type="password" value="" /></p> <p><input type="checkbox" name="setcookie" /> Ingelogd blijven?</p> <input type="submit" class="alinea" value="Log In"> </form> |
Op iedere pagina require ik dit script:
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
| <?php require('config.php'); session_start(); //sessie ID vernieuwen, iedere keer als er een pagina wordt bekeken. session_regenerate_id(); //controleren of dat we ingelogd zijn if (isset($_SESSION['password']) OR isset($_SESSION['username']) OR isset($_SESSION['uid'])) { //controleren of dat de login nog steeds klopt. $query = mysql_query("SELECT * FROM Users WHERE username='".$_SESSION['username']."' AND password='".$_SESSION['password']."' AND uid='".$_SESSION['uid']."' AND acl='".$_SESSION['acl']."'"); if (mysql_num_rows($query) != "1") { session_destroy(); die('#1 Sessie mismatch - Log opnieuw in'); } //kijken of de User Agent nog steeds overeen komt. if ($_SERVER['HTTP_USER_AGENT'] != $_SESSION['ua']) { session_destroy(); die('#2 Sessie mismatch - Log opnieuw in'); } } elseif (isset($_COOKIE['username'])) { $username = mysql_real_escape_string($_COOKIE['username']); $md5pass = mysql_real_escape_string($_COOKIE['password']); $uid = mysql_real_escape_string($_COOKIE['uid']); $query = mysql_query("SELECT * FROM Users WHERE username='".$username."' AND password='".$md5pass."' AND uid='".$uid."'"); if (mysql_num_rows($query) == "1") { while($row = mysql_fetch_array($query)) { $_SESSION['uid'] = $row['uid']; $_SESSION['username'] = $row['username']; $_SESSION['password'] = $row['password']; $_SESSION['acl'] = $row['acl']; $_SESSION['ua'] = $_SERVER['HTTP_USER_AGENT']; } } else { // cookies laten verlopen als ze bestaan setcookie("uid", "", time()-3600); setcookie("username", "", time()-3600); setcookie("password", "", time()-3600); } } else { //We hebben te maken met een gast $_SESSION['acl'] = "3"; } ?> |
Om te kijken of een gebruiker toegang heeft tot de pagina, gebruik ik dit script:
(hoe lager het ACL-level, hoe meer toegang je hebt)
PHP:
1
2
3
| if ($_SESSION['acl'] > $acl) { die('Toegang Geweigerd'); } |
Dit is de database-table waarin de user-informatie staat:
uid | username | password | acl |
1 | test | 098f6bcd4621d373cade4e832627b4f6 | 0 |
Bedankt
[ Voor 4% gewijzigd door X_lawl_X op 02-10-2009 20:21 ]