Was ist der beste Weg für eine Website zu implementieren „an mich erinnern?“ [geschlossen]

StackOverflow https://stackoverflow.com/questions/244882

  •  05-07-2019
  •  | 
  •  

Frage

Ich möchte meine Website eine Checkbox haben, die Benutzer so klicken können, dass sie in jedem log müssen Zeit, die sie meine Website besuchen nicht. Ich weiß, ich muss ein Cookie auf Ihrem Computer speichern, um dies zu implementieren, aber was sollte in diesem Cookie enthalten sein?

Auch gibt es häufige Fehler zu achten gilt dieses Cookie zu verhindern, eine Sicherheitslücke darstellt, die während immer noch die ‚remember me‘ -Funktionalität geben könnten vermieden werden?

War es hilfreich?

Lösung

Verbesserte Persistent Login-Cookie-Best Practice

Sie können diese Strategie verwenden beschrieben hier als Best Practice (2006) oder eine aktualisierte Strategie hier beschrieben (2015):

  1. Wenn der Benutzer erfolgreich anmeldet mit Remember Me geprüft, ein Login-Cookie wird ausgegeben neben dem Standard-Session-Management-Cookie.
  2. Der Login-Cookie enthält eine Reihe Kennung und ein Token . Die Serie und Token sind unguessable Zufallszahlen aus einem entsprechend großen Raum. Beide gespeichert werden zusammen in einer Datenbanktabelle das Token wird gehasht (sha256 ist in Ordnung).
  3. Wenn ein nicht-angemeldete Benutzer die Website besucht und präsentiert ein Login Cookie, die Serie Kennung sah in der Datenbank .
    1. Wenn die Serie Kennung vorhanden ist und die Hash-Wert des Token entspricht den Hash für diese Serie Kennung, wird der Benutzer als authentifizierte . Ein neues Token erzeugt wird, wird ein neuer Hash für das Token über den alten Datensatz gespeichert, und ein neuer Login-Cookie wird an den Benutzer ausgegeben (es ist in Ordnung, die Serie Kennung wieder verwenden ).
    2. Wenn die Reihe vorhanden ist, aber das Token nicht übereinstimmt, ein Diebstahl wird angenommen. Der Benutzer erhält eine nachdrückliche Warnung und alle von der Erinnerung Sitzungen des Benutzers gelöscht.
    3. Wenn der Benutzername und Serie nicht vorhanden ist, der Login-Cookie ist ignoriert .

Dieser Ansatz bietet Verteidigung-in-Tiefe. Wenn jemand die Datenbanktabelle Leck schafft, gibt es nicht einem Angreifer eine offene Tür Benutzer für Identitätswechsel.

Andere Tipps

Ich würde speichern Sie einen Benutzer-ID und ein Token. Wenn der Benutzer auf die Website kommt zurück, vergleicht diese beiden Informationen gegen persistent so etwas wie ein Datenbankeintrag.

Wie für die Sicherheit, setzt einfach nichts drin, dass jemand erlauben, das Cookie zu modifizieren, zusätzliche Vorteile zu gewinnen. Zum Beispiel, nicht speichern ihre Benutzergruppen oder ihr Passwort. Alles, was geändert werden kann, die Ihre Sicherheit umgehen würden, wenn nicht im Cookie gespeichert werden.

Speichern Sie ihre Benutzer-ID und ein RememberMeToken. Als sie melden Sie sich mit erinnere mich generieren überprüft ein neues RememberMeToken (die keine anderen Maschinen ungültig machen, die mich sind markiert erinnern).

Wenn sie sie durch die erinnern zurückkehren sehen mich Token und stellen Sie sicher, dass die Benutzer-ID Streichhölzer.

Die Untersuchung permanenten Sitzungen mich Ich habe festgestellt, dass es einfach nicht das Sicherheitsrisiko wert. Verwenden Sie es, wenn Sie unbedingt haben, aber Sie sollten prüfen, eine solche Sitzung nur schwach authentifiziert und zwingen ein neues Login für alles, was von Wert für einen Angreifer sein könnte.

Der Grund dafür ist natürlich, dass Ihre Cookies, um Ihre persistente Sitzung enthalten, sind so leicht gestohlen werden.

4 Möglichkeiten, um Ihre Cookies zu stehlen (von einen Kommentar von Jens Roland auf der Seite @splattne Basis seiner Antwort auf):

  1. Durch sie über ein unsicheres Linie abfangen (Packet Sniffing / Session Hijacking)
  2. Mit dem direkt dem Browser des Benutzers zugreifen (entweder über Malware oder physischen Zugriff auf das Feld)
  3. Mit dem aus der Server-Datenbank zu lesen (wahrscheinlich SQL Injection, aber könnte alles sein)
  4. Durch eine XSS hacken (oder ähnliche clientseitige ausbeuten)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top