Ich verwende zwei Variablen in Cookie (7 Tage Ablaufdatum), die Benutzer-ID und Hash ist. Hash ist sha1 encode des Benutzeragenten und der Benutzer-ID. In diesem Fall kann sich ein Hacker anmelden, der den Browser des gestohlenen Cookies kennt. Welchen Weg sollte ich einschlagen oder welche Übung eignet sich am besten, um mich an Sicherheitsprobleme zu erinnern?
Während Sie eine user_id und secret_key hashen können, kann sich jeder, der diesen Cookie abfängt, bei Ihrer Anwendung anmelden. Darüber hinaus können Sie es so einrichten, dass Ihre Erinnerungen an mich sehr schnell veralten. Niemand mag einen abgestandenen Keks.
Sie können den Zeitstempel des letzten Besuchs jedes Benutzers in Ihrer Datenbank und im Cookie speichern. Jedes Mal, wenn Sie den Cookie zum Anmelden des Benutzers lesen, überprüfen Sie, ob beide Zeitstempel übereinstimmen. Wenn dies nicht der Fall ist, verweigern Sie den Benutzer. Wenn dies der Fall ist, aktualisieren Sie die Zeitstempel.
Wenn Sie diese Methode verwenden, werden die alten Cookies jedes Mal, wenn der Benutzer auf Ihre Website zurückkehrt, veraltet. Ein Hacker, der einen Cookie abgefangen hat, hat nun einen wertlosen veralteten Cookie, weil er den genauen Zeitstempel im aktuellen Cookie nicht kennt. Natürlich kann der Hacker so lange einen frischen Cookie verwenden, bis sich der Benutzer wieder anmeldet.
%Vor%Diese Methode bietet ein kleines Maß an Sicherheit und sollte sicherlich zusammen mit anderen Methoden verwendet werden. Ein Hash-Schlüssel sollte im Cookie gespeichert werden. Ein Remember-Me-Cookie kann nicht vollkommen sicher sein, daher sollte für einen zusätzlichen Zugriff auf hochsensible Daten oder Anwendungsfunktionen ein Passwort-Wiedereintritt erforderlich sein.
Ich empfehle auch, deinem Cookie etwas außer 'remember_me' zu geben, um es etwas schwieriger zu finden. Während es nicht viel Sicherheit hinzufügt, wenn überhaupt, dauert die Benennung Ihres Cookies 'ht33424' genauso lange wie die Benennung 'remember_me' oder 'hack_me'.
Sie können einfach das Ablaufdatum als plus ein Jahr auf dem Cookie setzen, aber dann haben Sie ein Passwortfeld in allen sensiblen Bereichen, ähnlich der Implementierung, die amazon verwendet. Ein entführter Cookie gewährt Zugriff, aber um etwas Persönliches zu kaufen oder zu ändern, muss das Passwort erneut eingegeben werden.
Das Problem mit den "Remember me" -Tabellen ist, dass ein Hacker, wenn er Zugang zu dieser Tabelle hat, so viele Konten erstellen und anmelden kann, wie er möchte. Sie können argumentieren, dass es die Sicherheit eines Erinnerungsmerkmals stärkt, aber es muss mit dem Risiko abgewogen werden, die Sicherheitsbereiche im Knie zu mildern.
Persönlich erstelle ich einen zufälligen Hash und speichere ihn in einer "Remember me" -Tabelle. Die Tabelle enthält außerdem den Benutzeragenten, die Benutzer-ID und die IP-Adresse. Ich überprüfe jedes Mal, wenn ich den Benutzer von der Erinnerung-mich-Funktion erneut anmelde. Und wenn sich der Benutzer manuell abmeldet, entferne ich diese Zeile einfach aus der Tabelle. Wenn sie sich erneut anmelden, wird ein neuer zufälliger Hash erstellt. Es gibt wirklich keine Möglichkeit, jemanden zu bekämpfen, der Pakete mit einem Remember Me-System schnüffelt (es sei denn, Sie verwenden sichere Cookies, bei denen nur das HTTPS-Flag gesetzt ist). Verwenden Sie daher eine sichere Verbindung mit HTTPS-Cookies. Wenn Sie nicht können, dann machen Sie zumindest den Hash zufällig. Wenn er entdeckt wird, können Sie zumindest einen neuen Hash erzeugen, um diesen Login zu löschen ...
Sie können schließlich Sitzungen verwenden, um den Benutzerstatus zu speichern. Aber halten Sitzung so lange dasselbe Problem, wenn Sitzung ID gestohlen wird. Sie können Cookie-Informationen mit einem anderen - wie Browser oder IP-Adresse - verbinden, aber es würde ein Problem verursachen, wenn der Benutzer keine statische IP-Adresse hat.
Auf jeden Fall ist es sicherer, eine Sitzungs-ID zu halten, wenn das Passwort des Benutzers auf Cookies gesetzt wird.
HMAC
Normalerweise mache ich das so, dass ich nichts auf der Serverseite in Datenbanken oder Ähnlichem speichern muss.
Sie müssen eine zufällige Zeichenfolge erzeugen, die zu Ihrem "geheimen Schlüssel" wird und die Sie auf der Serverseite speichern müssen (wahrscheinlich in einem PHP-Script als Konstante) und Sie müssen es niemandem erzählen. Ich werde diesen geheimen Schlüssel SECRET_KEY
nennen.
Dann muss Ihr Cookie zwei Werte setzen:
USER_ID
: Die Benutzer-ID des Benutzers, die die automatische Anmeldung erhält HASH
: Ein sicherer kryptographischer Hash von USER_ID
und SECRET_KEY
. So zum Beispiel md5(USER_ID . "-" . SECRET_KEY)
. (Etwas anderes als MD5, wie Sha1 oder Sha256 wird bevorzugt). Ihr endgültiger Cookie könnte also sein: USER_ID:HASH
.
Wenn Sie dann überprüfen müssen, ob ein Cookie ein echter Erinnerungs-Cookie ist, müssen Sie Folgendes tun:
%Vor% Der Punkt ist, dass nur Sie einen Hash generieren können, der diese Prüfung besteht, weil der Hash nicht nur die USER_ID
, sondern auch die SECRET_KEY
benötigt, die von niemandem außer dem Server unbekannt ist! :)
Wie in den Kommentaren erwähnt, können Sie dies tun, indem Sie die Funktion hash_hmac
in PHP & gt; = 5.1.2 verwenden: Ссылка
Tags und Links php cookies remember-me autologin