michi262
Goto Top

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

Content-Key: 96313

Url: https://administrator.de/contentid/96313

Printed on: April 24, 2024 at 00:04 o'clock

Member: filippg
filippg Sep 07, 2008 at 15:51:41 (UTC)
Goto Top
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
Member: Michi262
Michi262 Sep 07, 2008 at 16:15:15 (UTC)
Goto Top
Hi

danke. Nach dem es aber doch so viele Gefahren gibt wollte ich mal fragen ob mir da wer ne sichere! anleitung schreiben kann. D.h. das es möglichst sicher ist. Weil ich weiß nicht ob ich das so sicher hinbekomme ^^

Michi26206
Member: Enclave
Enclave Sep 21, 2008 at 12:54:42 (UTC)
Goto Top
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
$key = md5(ip.time().username.rand(1,1337).rand(1,1337).rand(1,1337).rand(1,1337).rand(1,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 face-smile

Mfg

Enclave
Member: Michi262
Michi262 Sep 22, 2008 at 15:10:20 (UTC)
Goto Top
Hi

danke fpr die antwort das mit dem Key und so ist bei mir net des Problem. Sondern wie ich Cookies speichere und auslese^^

Michi262
Member: Enclave
Enclave Sep 22, 2008 at 15:46:09 (UTC)
Goto Top
Ja speichern tust du die mit setcookie
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']))  
und genauso ließt du die aus und dann musst du halt noch überprüfen ob der Key zum User gehört...

Mfg

Chaos
Member: Michi262
Michi262 Sep 22, 2008 at 15:53:55 (UTC)
Goto Top
Hi

danke ich werds mal probieren thx.

Michi262
Member: Michi262
Michi262 Sep 26, 2008 at 14:39:39 (UTC)
Goto Top
Hi

sry wegen doppel Post aber sonst liest es leider kaum wer.

Also ich hab alles so gemacht allerdings kommt jetzt ein Error und zwar:

Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\htdocs\mycms\checklogin.php:21) in C:\Programme\xampp\htdocs\mycms\checklogin.php on line 62

Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\htdocs\mycms\checklogin.php:21) in C:\Programme\xampp\htdocs\mycms\checklogin.php on line 63

in Zeile 62 und 63 hab ich das setcookie stehen. Hab ich etwas vergessen oder falsch gemacht?

Und noch was:

Die Werte aus dem Cookie bekomm ich so oder?

$_COOKIE['pp_loginkey'] bzw. $_COOKIE['pp_user']

Wie "zerstör" ich den Cookie wieder?

Danke shcon mal für die Hilfe
Michi262
Member: Enclave
Enclave Sep 26, 2008 at 18:18:33 (UTC)
Goto Top
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).
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 so
Zitat von @Michi262:
Wie "zerstör" ich den Cookie wieder?
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
Member: Michi262
Michi262 Sep 28, 2008 at 15:54:24 (UTC)
Goto Top
Hi

ok danke. Hättest du nen Tipp wie ich dann den Cokkie setzen soll? Ich muss ja zuvor noch alle eingeben Prüfen ob es auch der richtige User ist und ob er überhaupt eingeloggt bleiben will.

Michi262
Member: Enclave
Enclave Sep 28, 2008 at 19:22:22 (UTC)
Goto Top
Ich sagte doch RTFM...

Mfg

Enclave
Member: Michi262
Michi262 Sep 29, 2008 at 15:53:36 (UTC)
Goto Top
Hi

ich hab das ding schon gelsen und jetz nochmal allerdings wer ich net schlau wie ich das machen soll das ich den Cokkie zu dem Zeitpunkt setze das kein Eingabefeld den blockiert. Könntest du mir nen Tipp geben?

Michi262
Member: Enclave
Enclave Sep 29, 2008 at 16:06:34 (UTC)
Goto Top
Du übergibst die Loginvariablen an eine andere Datei. Und die fängt dann zuallererst damit an:
<?php
// übergebene Variablen werden geprüft und Cookies gesetzt
?>
Du bist eingeloggt
oder auch nicht

Mfg

Enclave
Member: Michi262
Michi262 Oct 02, 2008 at 18:54:58 (UTC)
Goto Top
Hi,

bin endlich dazu gekommen. ;) Jetzt funktionierts danke.

Michi262