Ik maak gebruik van een aangepaste versie van phpSecurePages.
Dit werkt op zich hartstikke goed, maar nu kom ik regelmatig in contact met gebruikers die plotseling niet meer kunnen inloggen. Na wat proberen is gebleken dat het legen van de cache van de browser (in dit geval Internet Explorer) de oplossing was.
Dit is het loginscript:
en het script voor de interface:
De security wordt in elke pagina als volgt aangeroepen:
Ik maak dus nu gebruik van cookies. Zou het helpen om dit om te zetten naar sessions? Volgens mij gebruiken sessions ook 1 cookie.
Dit werkt op zich hartstikke goed, maar nu kom ik regelmatig in contact met gebruikers die plotseling niet meer kunnen inloggen. Na wat proberen is gebleken dat het legen van de cache van de browser (in dit geval Internet Explorer) de oplossing was.
Dit is het loginscript:
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
| <? session_start(); $sessionPath = session_get_cookie_params(); $encrypt = new Encryption(); $errID = NULL; /* ** Function: show login-interface and stop script **/ function setInterface($err = NULL){ global $errID; if(!is_null($err)) $errID = $err; setcookie("secUsr", '', time()-3600, $sessionPath["path"], $sessionPath["domain"]); setcookie("secPwd", '', time()-3600, $sessionPath["path"], $sessionPath["domain"]); # setcookie("secVersion", '', time()-3600, $sessionPath["path"], $sessionPath["domain"]); include("interface.php"); exit(); } /* ** Deal with submitted or cookie-saved login data **/ if(isset($_COOKIE['secUsr']) && $_COOKIE['secUsr']!="" && isset($_COOKIE['secPwd']) && $_COOKIE['secPwd']!=""){ $secUser = $_COOKIE['secUsr']; $secPwd = $_COOKIE['secPwd']; }elseif(isset($_POST["txtSecUsr"]) && $_POST["txtSecUsr"]!="" && isset($_POST["txtSecPwd"]) && $_POST["txtSecPwd"]!=""){ $secUser = $encrypt->AddEncryption($_POST["txtSecUsr"]); $secPwd = $encrypt->AddEncryption($_POST["txtSecPwd"]); }else{ setInterface(); } /* ** Save login data into cookies **/ setcookie("secUsr", $secUser, 0, $sessionPath["path"], $sessionPath["domain"]); setcookie("secPwd", $secPwd, 0, $sessionPath["path"], $sessionPath["domain"]); /* ** Verify login data **/ if(!isset($secUser) || !isset($secPwd)) setInterface(0); /* ** First check */ if($blnAdministration = ($encrypt->RemoveEncryption($secUser)==$admin['usr'])){ /* ** Check password */ if($encrypt->RemoveEncryption($secPwd)!= $admin['pwd']) setInterface(8); }else{ /* ** Use central user database */ $sql = new query($db["host"], $db["db"], $db["user"], $db["pwd"]); $sql->execute("SELECT * FROM `tblUsers` U WHERE (U.`txt_Username` = '" . $encrypt->RemoveEncryption($secUser) . "')"); /* ** Username should only appear 1 time **/ if($sql->numrows==1){ $sql->results(); $results = $sql->data[0]; /* ** Check case sensitive submitted username **/ if($encrypt->RemoveEncryption($secUser) != $results['txt_Username']) setInterface(2); /* ** Check if database user has a password **/ if(!isset($results['txt_Password']) || empty($results['txt_Password']) || $results['txt_Password']=="") setInterface(3); /* ** Check case sensitive password **/ # print $results['txt_Password'] . " : " . $encrypt->RemoveEncryption($results['txt_Password']) . "<br />"; if(stripslashes($encrypt->RemoveEncryption($secPwd)) != $encrypt->RemoveEncryption($results['txt_Password'])) setInterface(4); /* ** Check account (in)activity: n.v.t. **/ # if(!$results['bln_Active']) setInterface(5); /* ** Check userlevel **/ if(isset($requiredLevel) && ($requiredLevel!="" || !empty($requiredLevel))){ if(is_array($requiredLevel)){ if(!in_array($results['lng_Userlevel'], $requiredLevel)) setInterface(6); }elseif(is_int($requiredLevel)){ if($results['lng_Userlevel']!=$requiredLevel) setInterface(6); }else{ setInterface(6); } } /* ** Check userid */ if(isset($requiredID) && ($requiredID!="" || !empty($requiredID))){ if(is_array($requiredID)){ if(!in_array($results['lng_UserID'], $requiredID)) setInterface(6); }elseif(is_int($requiredID)){ if($results['lng_UserID']!=$requiredID) setInterface(6); }else{ setInterface(6); } } /* ** Login passed, set user vars **/ $user['id'] = $results['lng_UserID']; unset($results); }else{ setInterface(1); } $sql->Close(); unset($sql); } unset($encrypt); ?> |
en het script voor de interface:
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
| <? (ereg("php\.exe", PS) || ereg("php3\.cgi", PS) || ereg("phpts\.exe", PS))? $documentLocation = getenv($_SERVER['PATH_INFO']): $documentLocation = $_SERVER['PHP_SELF']; if($_SERVER['QUERY_STRING']!="") $documentLocation .= "?" . $_SERVER['QUERY_STRING']; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title><?=$_SERVER['HTTP_HOST'];?></title> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> <META NAME="ROBOTS" CONTENT="NONE"> <link href="/stylesheets/style.algemeen.css" rel="stylesheet" type="text/css" /> <style type="text/css"> body{ text-align: center; } </style> </head> <body onload="javascript:document.getElementById('txtSecUsr').focus();"> <form action="<?=$documentLocation;?>" method="post" name="frmInloggen" target="_self" id="frmInloggen"> <table id="tblInloggen" border="0" align="center" cellpadding="5" cellspacing="0"> <tr> <th colspan="2"><?=TITLE;?></th> </tr> <? if(!is_null($errID)){ switch($errID){ case 0: $msg = "U dient alle gegevens in te vullen!"; break; case 1: $msg = "Gebruikersnaam niet gevonden!"; break; case 2: $msg = "De gebruikersnaam is hoofdlettergevoelig!"; break; case 3: $msg = "Er is geen wachtwoord beken voor deze gebruiker!"; break; case 4: $msg = "Het opgegeven wachtwoord is onjuist!"; break; case 5: $msg = "Uw account is (nog) niet geactiveerd!"; break; case 6: $msg = "U heeft geen toegang tot deze pagina!"; break; case 7: $msg = "Er is helaas iets misgegaan!"; break; case 8: $msg = "Ongeldige gevens ingevoerd!"; break; default: $msg = "Fout opgetreden!"; } print "<tr> <td colspan=\"2\" id=\"errMsg\">$msg</td> </tr>"; } ?> <tr> <td>Gebruiker : </td> <td><input name="txtSecUsr" type="text" id="txtSecUsr" maxlength="15" /></td> </tr> <tr> <td>Wachtwoord : </td> <td><input name="txtSecPwd" type="password" id="txtSecPwd" maxlength="15" /></td> </tr> <tr> <td colspan="2"><font color="#666666">Wachtwoord vergeten? klik <a href="<?=PROGDIR;?>xml/passmailer.php" target="_self">hier</a>.</font></td> </tr> <tr> <td colspan="2" align="right"> <script type="text/javascript"> <!-- document.write('<input name="btnVersie" type="submit" id="btnVersie" value="verder" />'); //--> </script> <noscript> <font color="#CC0000">Uw browser ondersteunt geen javascript!</font> </noscript></td> </tr> </table> </form> </body> </html> |
De security wordt in elke pagina als volgt aangeroepen:
PHP:
1
2
3
4
5
| @require_once($_SERVER['DOCUMENT_ROOT'] . '/config/config.php'); if(!class_exists('phpDB')) die('Error: configuration failed!'); (defined("RSECDIR")) ? require_once(RSECDIR . "secure.php"): die("Error: secure directory not defined!"); |
Ik maak dus nu gebruik van cookies. Zou het helpen om dit om te zetten naar sessions? Volgens mij gebruiken sessions ook 1 cookie.
[ Voor 35% gewijzigd door Verwijderd op 20-07-2005 11:37 ]