Logindaten in Cookie speichern - Vorgehensweise, Sicherheit

Saugkraft

Aktives Mitglied
Thread Starter
Dabei seit
20.02.2005
Beiträge
9.022
Reaktionspunkte
3.189
Hallo liebe Mitstreiter,

ich will eine Website von einer reinen Session Authentifizierung auf eine Kombination aus Session und Cookie umstellen.

Bisher: User loggt sich ein, die Daten werden aus der DB abgefragt, es wird eine Session Variable -> z.B. session('auth') = 1 erstellt, die beim Zugriff auf nachfolgende Seiten abgerufen wird. Sobald die Session abgelaufen ist (hier am Server 15 Minuten ohne Aktivität), wird auf die Login-Seite umgeleitet und der User muss sich neu einloggen.

Jetzt will ich die Authentifizierung gerne in einem Cookie speichern (sofern der User das will).

Die Frage ist, wie ich da die entsprechende Sicherheit herstelle. Ich könnte ja theoretisch die user_id der Datenbank speichern. Das ist natürlich zu simpel, weil der Cookie editiert werden kann und der User Zugriff auf fremde Daten bekommen.

Wie löse ich sowas unkompliziert und sicher?

Mein Gedanke: Der User loggt sich ein, aus user_id, Login und Kennwort erzeuge ich einen md5 Hash und speichere den zusammen mit seiner user_id im Cookie. Ruft der User später die Seite auf, gibt es keine gültige Session, die Seite fragt die user_id und den Hash aus dem Cookie ab, erzeugt am Server den md5 Hash und vergleicht das Ergebnis. Bei Übereinstimmung wird die session('auth') erzeugt, damit nicht auf jeder Seite auf die DB zugegriffen werden muss.

Klingt das praktikabel oder gibt es eine bessere Lösung?

Denkbar wäre ja auch, dass beim Anlegen des Users ein Hash von bestimmter Länge aus seinen Daten erzeugt und in der DB gespeichert wird. Beim Aufruf einer Seite wird der dann einfach mit dem im Cookie verglichen. Der Vorteil: Bei select * from tbl_user where hash = "xyz" fällt schonmal die Generierung des Hashs weg. Da bin ich mir nur unsicher, ob das nicht per Brute-Force hackbar ist.

Für Ideen oder Erfahrungen bin ich äußerst dankbar. :)
 
Ich speichere den usernamen oder id sowie einen hash (nicht md5 sondern sha256) aus "username.passwort.SALT" in einem cookie.

SALT ist eine definierte Zufällige Zeichenfolge welche als Konstante in PHP hinterlegt ist. ( z.B. define('SALT', 'd64hbi74fWb8dk73jOw4/'); )

Gruss Simu
 
"ob das nicht per Brute-Force hackbar ist."

Dem beugst Du vor, in dem eine Zeitschleife die Eingabe/Prüfung verzögert - entweder als Steigerung beim nächsten Versuch ("Bitte warten sie 1…2…4…8…16…32 Sekunden"), oder indem nur eine Eingabe innerhalb z.B. einer Minute möglich ist. Letzteres ist natürlich ein Ärgerns, wenn man sich nur vertippt hat.
 
Zurück
Oben Unten