![]() |
PHP Sessions
hallo
ich habe eine frage zu PHP sessions also ich hab eine datenbank mit user & passwort. der user meldet sich an und die session-variable wird zum username. die session-variable bleibt dann so lange der username bis er sich mit session_destry() ausloggt. reicht das als ueberpruefung ob er angemeldet ist auf den folgeseiten und ist das auch sicher? danke michi |
Reichen wirds wohl, bis auf das Problem, das immer wieder auftritt (korrigiert mich wenn ich mir irre), dass Sessions nicht komplett gelöscht werden, wenn falsch eingestellt und Browser geschlossen, etc.
Sicher kommt mir das ganze aber nicht vor, ich würds eher so lösen, das neben dem Usernamen noch ein zufällig generierter Key übergeben wird, der gleichzeitig in ner Datenbank hinterlegt wird. Beim Seitenaufruf würd ich dann überprüfen ob zum Usernamen der Key in der Datenbank passt und passta - wennst lustig bist kannst natürlich noch usernamen verschlüsseln und so, ein maximum an sicherheit wirst mit sessions alleine halt nicht erreichen (meiner meinung) - fragt sich halt immer für welchen anwendungszweck die spielerei is... mfg Thomas |
imho nicht.
1.) musst du aufpassen, dass entweder register_globals auf OFF ist oder du bei JEDEM seitenaufruf prüfst ob session_user und session_pw mit dem aus der datenbank übereinstimmen. 2.) pw in der session als md5() hash speichern 3.) statt benutzernamen lieber eindeutige benutzerid nehmen |
@T.dot
was meinst du mit zufaellig generiertem key? ein string der bei der REGISTRATION der users generiert wird und in der db gespeichert wird? oder ein string der JEDESMAL wenn er sich EINLOGGT generiert wird und in die datenbank gespeichert wird und zur ueberpruefung gilt? |
Zitat:
|
aber ...
"Die Daten zu solch einer Sitzung werden unter der Kennnummer auf dem Webserver abgelegt. Die Vorteile: Es gibt keine Begrenzung der Datenmenge, die Daten sind sicher bzw. korrekt und die Daten müssen nicht per <input type="hidden" ... > dauernd zwischen Browser und Webserver hin- und hergeschickt werden, womit sich die Sicherheit gegen Datenmanipulation erhöht." reicht es dann nicht wenn kein user eingeloggt ist dass die session-variable leer ist und so der seitenaufruf verhindert wird? und wenn ich dann einen eingeloggten user hab (auch wenn er die seite zu macht, ist er dann halt wieder eingeloggt, das will ich eh so) kann er die seite aufrufen (also wenn die session-variable gleich einem user ist den es in der datenbank gibt - die ueberpruefung des passworts kommt eh beim login). |
Zitat:
|
aber wenn ich den browser schließe und dann die seite wieder aufrufe bin ich noch immer eingeloggt
|
Zitat:
wie machst du sessions? mit setcooke() oder mit session_register()/$_SESSION[] = ""; |
session_start();
session_register('sessionuser'); if($do=="logout") { session_unregister('sessionuser'); session_destroy(); } |
da wird es zB auch nicht anders gemacht
http://www.tutorials.de/tutorials9684.html ich benutze sessions das erste mal und weiß nicht wie sicher das ist, aber wenn ichs schon in vielen tutorials gelesen hab dass es so geht? |
Zitat:
kommt immer auf die Einstellung (in dem Fall php.ini) an. Sessions können Jahre aktiv sein (schon mal 'remember me' irgendwo angeklickt und nach dem nächsten reboot warst du immer noch eingeloggt?)). |
Die remember me Sachen gehen über Cookies.
Jak |
Zitat:
ad2: anklicken tu ich gar nix. weil fürn apache gibts unter windows afaik kein grapisches konfig-menu. |
Die Sessions sind aber serverseitig noch aktiv (wie soll der Server auch mitkriegen, dass du deinen Browser geschlossen hast).
Deswegen ist auch Session Hijacking etc. möglich. Normale PHP Sessions sind sehr unsicher. Je nachdem wie sicher man es haben möchte sollten folgende Dinge selbst implementiert werden: - Timeout der Session (zB mittels Session Storing in DB) - Gegenstelle prüfen (zB mittels IP o. Agent oä. - kann probleme geben zB bei AOL Proxy, der über mehrere IPs geht - besser mittels eines "Fingerprints" der zB aus Timestamp, Agent, Referrer etc. besteht und auf jeder Seite neu generiert wird) - Transaction IDs - IMMER bestimmte Variablen prüfen, auf jeder Seite - zB Password als MD5 Hash mit der DB vergleichen. Sonst reicht mir die SessionID um die Session zu hijacken. oä. |
"- IMMER bestimmte Variablen prüfen, auf jeder Seite - zB Password als MD5 Hash mit der DB vergleichen. Sonst reicht mir die SessionID um die Session zu hijacken."
meinst du ich soll das password als md5() als session-variable und in der datenbank speichern? oder soll ich einfach mit einem php script das passwort immer zur naechsten seite weitergeben mit $_GET, dort mit dem datenbankeintrag vergleichen und wenns stimmt erst mit der session weitermachen? |
wenn dann gibs mit $_POST weiter da bei $_GET die daten an die url angehängt werden, bei $_POST nicht!
|
Zitat:
Diese beiden Werte bei jedem Aufruf gegenchecken. |
Zitat:
|
Zitat:
mfg Peter |
Zitat:
|
@cg32
wie genau meinst du das? nur ein paar code-auszuege... session_start(); session_register('username'); session_register('md5password'); // LOGOUT: if ($do == "logout") { session_unregister('username'); session_unregister('md5password'); session_destroy(); } // BEIM LOGIN: $_SESSION['username'] = $_POST['username_vom_formular']; $_SESSION['md5password'] = md5($_POST['password_vom_formular']); und dann bei jeder datei wo ich eine ueberpruefung brauch ob wer angemeldet ist ... session_start(); session_register('username'); session_register('md5password'); $result = mysql_query("SELECT user,pass FROM users WHERE user='$_SESSION['username']' AND pass='$_SESSION['md5password']'"); $menge = mysql_num_rows($result); wenn jetzt menge == 1 ists ok, andernfalls ists nicht ok passt das so? |
is zwar ned an mich gerichtet aber wurscht :D
also für logout für ich ne eigenen function machen. is imho praktischer aber nicht nötig. dann beim einloggen PHP-Code:
logout ca so: PHP-Code:
|
danke!
im prinzip eh das gleiche wie meine code schnippsel wollts ja nur mal zeigen und fragen ob es theoretisch so geht die ganzen ueberpruefungen dass man ja nix boeses eingeben kann kommen ja noch =) |
Danke Potassium ;)
Dem gibts nichts hinzuzufügen - mach zumindest eine solche Überprüfung um enie allzuleiches Hijackig der Session zu verhindern. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag