Ik ben mijn inlogsysteem aan het hacken, of hoe je dat wil noemen. Ik probeer dus gegevens en instellingen te veranderen van de browser en browsers om zo een valse inlog of rechten te krijgen over de site.
Ik heb nu mijn browserinstellingen (IE 5.0) zo staan dat SessionCookies niet geaccepteerd word (er word om gevraagd) en dat Cookies geaccepteerd mogen worden. Normaal gesproken geen logische instelling, van een gebruiker van een site, want alleen Cookies worden op de HDD opgeslagen en verdwijnen niet na het afsluiten van het venster.
Iemand logged in en word dus netjes geauthoriseerd.
MAAR:
er word geen sessiecookie geplaats, dus bij elke nieuwe pagina word er geprobeert een sessiecookie te registeren, wat volgens de code succesvol is gelukt. Dit kan omdat ik een cookie opsla die later als men weer op de site komt (nieuw venster) de sessiecookie weer aanmaakt.
Zodra ik dus gegevens over de user opvraag mbv de sessiegegevens in de sessie, komt er dus niks uit... dit is immers logisch, en is een gevolg op het bovenstaande.
Nu kan ik er vanuit gaan dat de user sessiecookies accepteert, en als dit niet het geval is, dat er dan ook geen cookies geaccepteerd wordt. Dit lijkt mij een beetje slordig programmeerwerk, ik moet dus bij het registeren van de sessievariabelen kunnen controleren of dit echt gebeurd is.
Het begin van een php script ziet er altijd zo uit bij mij:
de functie CheckLogin() is
De fout zit dus in setsessie(), en eigenlijk al eerder in LoginUser(). Ik denk wel dat dit simpel op te lossen is, door session_is_registered of $test = session_register ipv session_register toch?
Zouden er nog meer instellingen zijn, met netscape of andere browsers, die ik niet gebruik, die dit inlogscript laten denken ingelogd te zijn, maar dat eigenlijk niet is?
Ik heb nu mijn browserinstellingen (IE 5.0) zo staan dat SessionCookies niet geaccepteerd word (er word om gevraagd) en dat Cookies geaccepteerd mogen worden. Normaal gesproken geen logische instelling, van een gebruiker van een site, want alleen Cookies worden op de HDD opgeslagen en verdwijnen niet na het afsluiten van het venster.
Iemand logged in en word dus netjes geauthoriseerd.
MAAR:
er word geen sessiecookie geplaats, dus bij elke nieuwe pagina word er geprobeert een sessiecookie te registeren, wat volgens de code succesvol is gelukt. Dit kan omdat ik een cookie opsla die later als men weer op de site komt (nieuw venster) de sessiecookie weer aanmaakt.
Zodra ik dus gegevens over de user opvraag mbv de sessiegegevens in de sessie, komt er dus niks uit... dit is immers logisch, en is een gevolg op het bovenstaande.
Nu kan ik er vanuit gaan dat de user sessiecookies accepteert, en als dit niet het geval is, dat er dan ook geen cookies geaccepteerd wordt. Dit lijkt mij een beetje slordig programmeerwerk, ik moet dus bij het registeren van de sessievariabelen kunnen controleren of dit echt gebeurd is.
PHP:
1
| <?function LoginUser($username, $password, $cookie_levensduur){ $username = addslashes($username); $password = addslashes($password); $cookie_levensduur = addslashes( $cookie_levensduur); $Query_Users = mysql_query("SELECT UserID, Active FROM users WHERE UserName = '$username' AND UserPassword = '$password'"); if (mysql_num_rows($Query_Users) == 1){ $Query_Users_Array = mysql_fetch_array($Query_Users); if ($Query_Users_Array["Active"]){ $Tijd = time(); $Cookie_inhoud_CookieID = RandomCookieID(); $Cookie_inhoud_UserID = $Query_Users_Array["UserID"]; $Ipadres = getenv('REMOTE_ADDR'); if ($cookie_levensduur == "01"){ setcookie ("cookie[1]", $Cookie_inhoud_CookieID, $Tijd + 86400); // regel 70 setcookie ("cookie[2]", $Cookie_inhoud_UserID, $Tijd + 86400); // regel 71 mysql_query("INSERT INTO auth VALUES ('$Cookie_inhoud_CookieID', '$Cookie_inhoud_UserID', '1', '$Ipadres', '$Tijd')"); } elseif ($cookie_levensduur == "02"){ setcookie ("cookie[1]", $Cookie_inhoud_CookieID, $Tijd + 7*86400); setcookie ("cookie[2]", $Cookie_inhoud_UserID, $Tijd + 7*86400); mysql_query("INSERT INTO auth VALUES ('$Cookie_inhoud_CookieID', '$Cookie_inhoud_UserID', '2', '$Ipadres', '$Tijd')"); } elseif ($cookie_levensduur == "03"){ setcookie ("cookie[1]", $Cookie_inhoud_CookieID, $Tijd + 28*86400); setcookie ("cookie[2]", $Cookie_inhoud_UserID, $Tijd + 28*86400); mysql_query("INSERT INTO auth VALUES ('$Cookie_inhoud_CookieID', '$Cookie_inhoud_UserID', '3', '$Ipadres', '$Tijd')"); } $Login_Done = "1"; $Ip_Adres = getenv('REMOTE_ADDR'); $CookieID = $Cookie_inhoud_CookieID; $UserID = $Cookie_inhoud_UserID; session_register("Login_Done"); $GLOBALS['Login_Done'] = $Login_Done; session_register("Ip_Adres"); $GLOBALS['Ip_Adres'] = $Ip_Adres; session_register("CookieID"); $GLOBALS['CookieID'] = $CookieID; session_register("UserID"); $GLOBALS['UserID'] = $UserID; return 1; } Else { return "U heeft dit Useraccount nog niet geactiveerd, wacht op uw emailtje"; } } Else { return "De Ingevoerde gegevens zijn niet bekend in de database, de user bestaat niet"; }}function setsessie(){ $Cookie_CookieID = addslashes($GLOBALS['HTTP_COOKIE_VARS']['cookie'][1]); $Cookie_UserID = addslashes($GLOBALS['HTTP_COOKIE_VARS']['cookie'][2]); $Query_auth = mysql_query("SELECT Geldig, Last_Accessed, Ip_adres FROM auth WHERE CookieID = '$Cookie_CookieID' AND UserID = '$Cookie_UserID'"); if (mysql_num_rows($Query_auth) == 1){ list($Geldig, $Last_Accessed, $Ip_Adres) = mysql_fetch_row($Query_auth); $Tijd = time(); switch($Geldig){ case 1: $Tijd_Geldig = 86400; break; case 2: $Tijd_Geldig = 86400 * 7; break; case 3: $Tijd_Geldig = 86400 * 7 * 4; break; } $Tijd_Geldig_Max = $Last_Accessed + $Tijd_Geldig; if (($Tijd_Geldig_Max > $Tijd) AND (getenv('REMOTE_ADDR') == $Ip_Adres)){ $Login_Done = "1"; session_register("Login_Done"); $GLOBALS['Login_Done'] = $Login_Done; session_register("Ip_Adres"); $GLOBALS['Ip_Adres'] = $Ip_Adres; $CookieID = $Cookie_CookieID; session_register("CookieID"); $GLOBALS['CookieID'] = $Cookie_CookieID; $UserID = $Cookie_UserID; session_register("UserID"); $GLOBALS['UserID'] = $Cookie_UserID; return 1; } else { return 0; } } else { return 0; }}?> |
Het begin van een php script ziet er altijd zo uit bij mij:
PHP:
1
| <?session_start();include ("./mvnconfig/common.inc.php");include ("./mvnconfig/auth.inc.php");connecttodatabase();if (CheckLogin()){ $lid = 1;}else { $lid = 0;}?> |
de functie CheckLogin() is
PHP:
1
| <?function CheckLogin(){if ($GLOBALS['HTTP_SESSION_VARS']['Login_Done'] == "1"){ resetcookie(); return 1; } elseif ($GLOBALS['HTTP_COOKIE_VARS']['cookie'][1] != "") { return setsessie(); } else { return 0; }}?> |
De fout zit dus in setsessie(), en eigenlijk al eerder in LoginUser(). Ik denk wel dat dit simpel op te lossen is, door session_is_registered of $test = session_register ipv session_register toch?
Zouden er nog meer instellingen zijn, met netscape of andere browsers, die ik niet gebruik, die dit inlogscript laten denken ingelogd te zijn, maar dat eigenlijk niet is?