Problem mit Login Wie geht es das man sich dauerhaft einloggen kann.
Hi
wie ich oben schon geschrieben habe möchte ich das man sich auf einer Seite dauerhaft einloggen kann.
Ich weiß auch das ich dadurch die sessions mit dem cookie über eine DB verknüpfen muss aber wie das geht weiß ich nicht.
Wie es funktioniert das es nicht dauerhaft ist weiß ich mitlerweile.
Hab dann mal n bisschen gesucht und bin auf das gestoßen: http://tut.php-quake.net/login.html
Leider komm ich da nicht so richtug weiter.
Könnte mir wer von euch das erklären?
Wäre euch sehr dankbar
Michi262
wie ich oben schon geschrieben habe möchte ich das man sich auf einer Seite dauerhaft einloggen kann.
Ich weiß auch das ich dadurch die sessions mit dem cookie über eine DB verknüpfen muss aber wie das geht weiß ich nicht.
Wie es funktioniert das es nicht dauerhaft ist weiß ich mitlerweile.
Hab dann mal n bisschen gesucht und bin auf das gestoßen: http://tut.php-quake.net/login.html
Leider komm ich da nicht so richtug weiter.
Könnte mir wer von euch das erklären?
Wäre euch sehr dankbar
Michi262
Please also mark the comments that contributed to the solution of the article
Content-Key: 96313
Url: https://administrator.de/contentid/96313
Printed on: April 24, 2024 at 00:04 o'clock
13 Comments
Latest comment
Hallo,
letztlich ist es ganz einfach. Wenn sich jemand erfolgreich eingeloggt hast sendest du ihm ein Cookie in dem seine Nutzer-ID steht. Das Ablaufdatum des Cookies setzt du auf "Never".
Wenn ein Nutzer neu auf die Seite kommt fragst du ab, ob dieses Cookie bei ihm existiert und liest gegebenenfalls die Nutzer-ID aus. Wie du für die einzelnen Seiten die Authentifizierung bei dir machst (ich gehe mal davon aus über die SESSION-Variablen/Mechanismen von PHP oder?) weiß ich nicht, aber die Nutzer-ID musst du dann halt als "erfolgreich authentifiziert" anerkennen.
So zumindest das Grundprinzip. Es ergibt sich nur ein Sicherheitsproblem:
Wenn das Cookie nur die Nutzer-ID speichert (und die Nutzer-IDs kann man meist irgendwo herausbekommen) dann kann jemand das bei sich gespeicherte Cookie so manipulieren, dass er plötzlich als jemand anderes angemeldet ist. Das kann man verhindern, indem man noch einen anderen Wert mit dazuschreibt - beispielsweise eine weitere ID, die auf der Seite nirgends einzusehen ist, aber in der Datenbank bei den Nutzerdaten gespeichert wird. Soll nun jemand über sein Cookie authenitfiziert werden, dann wird auch diese zweite ID ausgelesen und mit dem Wert in der DB verglichen. Nur wenn die beiden übereinstimmen wird das Cookie anerkannt.
Daneben gibt es noch die üblichen Gefahren, z.b. 1. dass das Cookie gespeichert ist, jemand mit Zugriff auf den Rechner des Nutzers sich also als dieser anmelden kann oder das Cookie kopieren kann, dass 2. das Cookie bei der Übertragung abgehört werden kann, dass 3. Sessions geklaut werden können, wenn man die Session-ID abhören kann etc...
Gruß
Filipp
letztlich ist es ganz einfach. Wenn sich jemand erfolgreich eingeloggt hast sendest du ihm ein Cookie in dem seine Nutzer-ID steht. Das Ablaufdatum des Cookies setzt du auf "Never".
Wenn ein Nutzer neu auf die Seite kommt fragst du ab, ob dieses Cookie bei ihm existiert und liest gegebenenfalls die Nutzer-ID aus. Wie du für die einzelnen Seiten die Authentifizierung bei dir machst (ich gehe mal davon aus über die SESSION-Variablen/Mechanismen von PHP oder?) weiß ich nicht, aber die Nutzer-ID musst du dann halt als "erfolgreich authentifiziert" anerkennen.
So zumindest das Grundprinzip. Es ergibt sich nur ein Sicherheitsproblem:
Wenn das Cookie nur die Nutzer-ID speichert (und die Nutzer-IDs kann man meist irgendwo herausbekommen) dann kann jemand das bei sich gespeicherte Cookie so manipulieren, dass er plötzlich als jemand anderes angemeldet ist. Das kann man verhindern, indem man noch einen anderen Wert mit dazuschreibt - beispielsweise eine weitere ID, die auf der Seite nirgends einzusehen ist, aber in der Datenbank bei den Nutzerdaten gespeichert wird. Soll nun jemand über sein Cookie authenitfiziert werden, dann wird auch diese zweite ID ausgelesen und mit dem Wert in der DB verglichen. Nur wenn die beiden übereinstimmen wird das Cookie anerkannt.
Daneben gibt es noch die üblichen Gefahren, z.b. 1. dass das Cookie gespeichert ist, jemand mit Zugriff auf den Rechner des Nutzers sich also als dieser anmelden kann oder das Cookie kopieren kann, dass 2. das Cookie bei der Übertragung abgehört werden kann, dass 3. Sessions geklaut werden können, wenn man die Session-ID abhören kann etc...
Gruß
Filipp
Also ich habe das so gemacht:
Ich habe 2 Tabellen: user und loginkeys
Wenn sich jetzt jemand einloggt generiere ich mir einen Key der aus dem MD5 Hash folgender Werte besteht:
- IP
- Aktuelle Zeit
- Username
- und 5 zufälligen Zahlen zwischen 1 und 1337
Diesen Key schreibe ich mit der dazugehörigen Userid in die Tabelle login (man kann die beiden Tabellen natürlich auch zusammenfassen aber ich zieh mir die Sachen lieber was auseinander)
Diesen Key kann man nahezu unmöglich rekonstruieren. Diesen Key und die Userid speicher ich als Cookie auf dem Rechner.
Beim Besuch der Seite wird überprüft ob der Key stimmt und wenn er stimmt ist man halt eingeloggt...
Viele speichern die Userid sowie den MD5 Hash des Passworts in einem Cookie.
Wenn jetzt jemand an die Cookies kommt (wie auch immer) kann er versuchen das Passwort zu cracken.
Bei meiner Variante kann er sich zwar einloggen aber er kommt nicht an das Passwort dran und da bei mir das alte Passwort angegeben werden muss wenn man das PW ändern will kann er das PW nicht ändern.
Mann kann den Loginkey auch noch mit dem IP Range xx.xx.*.* kombinieren um zusätzliche Sicherheit zu bekommen...
Ich hoffe das war genug Anregung
Mfg
Enclave
Ich habe 2 Tabellen: user und loginkeys
Wenn sich jetzt jemand einloggt generiere ich mir einen Key der aus dem MD5 Hash folgender Werte besteht:
- IP
- Aktuelle Zeit
- Username
- und 5 zufälligen Zahlen zwischen 1 und 1337
$key = md5(ip.time().username.rand(1,1337).rand(1,1337).rand(1,1337).rand(1,1337).rand(1,1337));
Diesen Key kann man nahezu unmöglich rekonstruieren. Diesen Key und die Userid speicher ich als Cookie auf dem Rechner.
Beim Besuch der Seite wird überprüft ob der Key stimmt und wenn er stimmt ist man halt eingeloggt...
Viele speichern die Userid sowie den MD5 Hash des Passworts in einem Cookie.
Wenn jetzt jemand an die Cookies kommt (wie auch immer) kann er versuchen das Passwort zu cracken.
Bei meiner Variante kann er sich zwar einloggen aber er kommt nicht an das Passwort dran und da bei mir das alte Passwort angegeben werden muss wenn man das PW ändern will kann er das PW nicht ändern.
Mann kann den Loginkey auch noch mit dem IP Range xx.xx.*.* kombinieren um zusätzliche Sicherheit zu bekommen...
Ich hoffe das war genug Anregung
Mfg
Enclave
Ja speichern tust du die mit setcookie
Einfach PHP manuel lesen...
Und dann zur Überprüfung:
und genauso ließt du die aus und dann musst du halt noch überprüfen ob der Key zum User gehört...
Mfg
Chaos
setcookie("pp_loginkey", $key, time()+(60*60*24*30));
setcookie("pp_user", $user, time()+(60*60*24*30));
Einfach PHP manuel lesen...
Und dann zur Überprüfung:
if (isset($_COOKIE['pp_loginkey']) && isset($_COOKIE['pp_user']))
Mfg
Chaos
Zitat von @Michi262:
in Zeile 62 und 63 hab ich das setcookie stehen. Hab ich etwas
vergessen oder falsch gemacht?
Ja. Du darfst vor dem setzen keinen Output haben (keine Leerzeile und nichts anderes vor <?php).in Zeile 62 und 63 hab ich das setcookie stehen. Hab ich etwas
vergessen oder falsch gemacht?
Also kein echo oder so.
Zitat von @Michi262:
Die Werte aus dem Cookie bekomm ich so oder?
$_COOKIE['pp_loginkey'] bzw. $_COOKIE['pp_user']
genau soDie Werte aus dem Cookie bekomm ich so oder?
$_COOKIE['pp_loginkey'] bzw. $_COOKIE['pp_user']
Wer das Cookie löschen will ruft einfach setcookie nur mit der Namensangabe des Cookies auf:
setcookie("adressliste_cookie");
Auf php.net wird empfohlen, es ohne Wertangaben (also nur "") und mit negativer Geltungsdauer aufzurufen, damit es auch sicher gelöscht wird. Das sieht dann so aus:
setcookie("adressliste_cookie","",time()-3600);
Quelle: PHP für dich
Mfg
Enclave