PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

15-12-2006, 18:13
|
Hirnhamster
Registrierter Benutzer
|
|
Registriert seit: Oct 2006
Beiträge: 160
|
|
Session Lifetime
Hey!
Ich habe auf meiner Seite ein Login-System, dass auf Sessions basiert.
Es gibt eine zentrale index.php in die alle anderen Seiten includiert werden, deshalb steht am Anfang dieser Datei session_start, sodass es auf jeden aufgerufenen Seite am Anfang steht.
Damit die User sich nicht nach jedem Schließes des Browser und / oder nach längerer Inaktivität neu einloggen müssen, setze ich die Lifetime der Session und die des Cookies (falls der User Cookies aktiviert hat) auf ein Jahr.
PHP-Code:
ini_set('session.cookie_lifetime', 3600*24*365);
ini_set('session.gc_maxlifetime', 3600*24*365);
Nun ist es aber so, dass sich ja nicht jeder Nutzer, der die Seite besucht, registriert und einloggt. Die Session wird aber auf jeden Fall gestartet.
Nun habe ich mal in meinen tmp Ordner reingeschaut und darin waren Unmengen von Session-Dateien, von denen fast alle leer waren. Da ich aber die Lifetime auf ein Jahr gesetzt habe, räumt die garbage collection natürlich nicht auf.
Jetzt steh ich vor dem Problem, dass ich die Lifetime einer Session nur dann auf ein Jahr setzen will, wenn sich der User auch tatsächlich einloggt.
Da session_start auf jeden Fall am Anfang jeden Scriptes aufgerufen ist, wurde die Session ja bereits gestartet, wenn der User auch nur die Seite aufruft.
Meine Frage ist nun, ob ich das Problem irgendwie umgehen kann, also die Lifetime der Session nur dann auf ein Jahr setzen kann, wenn sich der User auch wirklich einloggt.
|

15-12-2006, 19:19
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Re: Session Lifetime
Ich würde ein vernünftiges Auto-Login-System implementieren, d.h. du speicherst im Cookie (dessen Laufzeit du beliebig festlegen kannst) einen String, anhand dessen du in der Datenbank den User finden kannst, und wenn der Cookie gesetzt ist, loggst du den User beim Betreten der Website ein. Und die beiden ini_set-Zeilen wieder raus
Ist zwar eine hübsche Idee die Session aktiv zu lassen, aber nicht wirklich hübsch praktikabel
|

15-12-2006, 19:59
|
3DMax
PHP Senior
|
|
Registriert seit: Jan 2004
Beiträge: 1.916
|
|
Re: Re: Session Lifetime
Zitat:
Original geschrieben von ghostgambler
d.h. du speicherst im Cookie einen String, anhand dessen du in der Datenbank den User finden kannst
|
sorry, dass ich mich jetzt einklinke.
aber wie wird soetwas allgemein gehandhabt? also was bedeutet in diesem fall "String" - wie setzt der sich zusammen bzw. wie wird er generiert?
|

16-12-2006, 02:28
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
PHP-Code:
$string = md5('Salz und '.rand());
Sowas reicht meist als Markierung.
Ist im Grunde auch egal, Hauptsache eindeutig und
schwer zu erraten.
Geändert von combie (16-12-2006 um 02:34 Uhr)
|

16-12-2006, 03:24
|
3DMax
PHP Senior
|
|
Registriert seit: Jan 2004
Beiträge: 1.916
|
|
Zitat:
Original geschrieben von combie
Sowas reicht meist als Markierung.
Ist im Grunde auch egal, Hauptsache eindeutig und
schwer zu erraten.
|
ja klar, passwörter kann man "salzen", aber man muss später auch aus dem cookie-"String" auf einen konkreten account schließen können.
selbst "gesalzte" passwörter können doppelt vorkommen (theoretisch).
ich glaube, ich hab's:
md5-(password mit username als salt) und im cookie noch den username und/oder user_id hinterlegen.
müsste passen - oder?
|

16-12-2006, 03:37
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
Der username sollte nicht im Cookie gespeichert werden..!
Das mit dem Salz ist auch relativ unwichtig..
Es dient nur dazu, den md5 String schwerer "vorauszusagen"
du brauchst halt irgendwas, was zufällig genug ist..
So...
Du hast sowieso eine usertabelle mit
ID | nick | email | passwort | usw
Du brauchst zusätzlich eine Tabelle: dauerlogin
dauerloginkey | userid | timestamp
Im Cookie speicherst du dann den dauerloginkey
Damit die Tabelle nicht aus dem Ruder läuft,
solltest du regelmäßig veraltete Einträge löschen.
Wenn dauerloginkey unique-index gesetzt ist, hat sich das
mit den Doppelvergaben auch erledigt..
Geändert von combie (16-12-2006 um 03:49 Uhr)
|

16-12-2006, 04:05
|
3DMax
PHP Senior
|
|
Registriert seit: Jan 2004
Beiträge: 1.916
|
|
ok, db-spalte, dachte ich mir schon.
Zitat:
Original geschrieben von combie
Der username sollte nicht im Cookie gespeichert werden..!
|
weil du schon mit dem ausrufezeichen ausdrücken möchtest, dass es potentiell unsicher ist (in diesem fall den benutzernamen zu speichern):
ich frage mich, ob man überhaupt einen auto-login zulassen sollte?
die sicherheitslücke internetcafe fällt mir da z.b. spontan ein, ein klick auf [] automatisch einloggen (bild-leser, und nicht nur diese, klicken auf alles mögliche) und alle nachfolger haben zugriff auf meinen account - toll.
|

16-12-2006, 12:52
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
Wenn der User im Internetcafe dieses Häkchen setzt, ist er selber Schuld..
Aber du hast Recht!
Man sollte das Autologin keinesfalls zum Standard erheben..!!
Geändert von combie (16-12-2006 um 12:57 Uhr)
|

16-12-2006, 22:03
|
Hirnhamster
Registrierter Benutzer
|
|
Registriert seit: Oct 2006
Beiträge: 160
|
|
Naja Problem ist, dass ich die Daten der Session weiterhin brauche, da dort nich nur Username und Rechte drin stehen.
ich hab's jetzt so gelöst, dass ich das Sessions System selbständig über eine DB verwalte. Damit hab ich ne bessere Kontrolle über die Lifetime der Session und kann sie für den Benutzer einzeln beliebig anpassen.
Grundlage war dieses Tutorial
|

17-12-2006, 13:34
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
Ein klares Wort?
Ja dann: Ich halte nix davon !!
1. Du versuchst Sessions für irgendwas zu missbrauchen, wofür sie nicht gedacht sind
2. nicht auf jedem System darfst du einen eigenen Session Handler stetzen
4. nur kurzlebige Daten in Session halten!
3. Langfristige Datenhaltung sollte in der DB stattfinden
|

17-12-2006, 17:22
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Zitat:
Original geschrieben von combie
1. Du versuchst Sessions für irgendwas zu missbrauchen, wofür sie nicht gedacht sind
|
Steht wo?
Zitat:
2. nicht auf jedem System darfst du einen eigenen Session Handler stetzen
|
Wüsste nicht wieso das nicht erlaubt sein sollte. Wenn der Hoster die Funktion deaktiviert hat -> Hoster wechseln
Zitat:
4. nur kurzlebige Daten in Session halten!
3. Langfristige Datenhaltung sollte in der DB stattfinden
|
Wieso?
Es ist nicht die übliche Verwendung von Sessions, aber ob jetzt ein session-cookie/session oder ein autolog-cookie/der entsprechende Datensatz, auf dem Server "offen" verbleibt, dürfte ziemlich Jacke wie Hose sein ... zumindest bin ich nach 2 Tagen überlegen über diesen Thread zu dem Schluss gekommen
|

17-12-2006, 20:52
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
Je länger die Sessions halten, desto mehr offene Sessions werden gehalten..
Je mehr offene Sessions, desto größer die Chance zur versehndlichen Übernahme..
Bei einer Lebenzeit von min 24 Minuten(Standard) ist die Wahrscheinlichkeit geringer, als wenn man das auf 1 Jahr ausdehnt...
Klar könnte man einen fürchterlichen Bug im Konzept, dadurch versuchen auszubügeln, daß man die Sessionverwaltung aufbläht...
Teil der Grundidee von Sitzungen, ist es ja gerade, daß diese auch mal enden.. und das Schließen des Browsers, ist doch der passende Zeitpunkt, warum davon abweichen und dieses wunderschöne Konzept unterlaufen..?
 Wenn es dem Esel zu gut geht, dann geht er aufs Glatteis
Ps:
Ich halte nicht viel von Autologin Systemen, bequem, Ja, das ist auch schon das schönste daran..
Geändert von combie (17-12-2006 um 21:03 Uhr)
|

17-12-2006, 21:14
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Zitat:
Original geschrieben von combie
Je länger die Sessions halten, desto mehr offene Sessions werden gehalten..
Je mehr offene Sessions, desto größer die Chance zur versehndlichen Übernahme..
|
Das gleiche Problem hat man bei der Auto-Login-ID auch, ist also das gleich in grün
|

17-12-2006, 21:24
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
Genau!
Ein riesen Sicherheitsloch!
Aber das kann man auch haben, ohne das arme Sessionhandlig umzukrempeln
|

17-12-2006, 22:17
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Zitat:
Original geschrieben von combie
Genau!
Ein riesen Sicherheitsloch!
Aber das kann man auch haben, ohne das arme Sessionhandlig umzukrempeln
|
Du glaubst also, dass ein 32^16 Zufallswert ein riesen Sicherheitsloch ist?
Ich finde das für reines BruteForce schon zu zeitaufwendig...
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|