Wie verwende ich Cookies auf sichere Weise, um Benutzer zu authentifizieren?

7

In den meisten Fällen verwende ich gerne Cookies, um mich daran zu erinnern, dass Benutzer wieder auf meine Websites zurückkehren.

In meinen frühen / dummen Tagen habe ich eine Benutzer-ID (Auto-Inkrement-Ganzzahl) in einem Cookie gespeichert, und wenn der Benutzer zurückgegeben hat, habe ich diesen Cookie-Wert verwendet, um sie automatisch anzumelden. Dies war eine schlechte Idee, da jemand das Cookie leicht bearbeiten konnte, um eine andere Ganzzahl zu verwenden und sich als jemand anderes anzumelden.

Ist es in Ordnung, eine Benutzer-ID auf dieselbe Weise zu speichern, wenn die Benutzer-ID eine GUID ist?

Was sind die besten Methoden zum Speichern von "Remember Me" -Cookies?

Jessegavin
quelle
Ich denke, dies ist eine angemessene (sprachunabhängige) Frage vom Typ Webmaster. Wenn die Leute das Gefühl haben, dass es sich eher um eine StackOverflow-Frage handelt, muss ich sie löschen oder so.
Jessegavin
Ich glaube, dies ist wirklich ein Stapelüberlauf-Szenario, denn selbst wenn es agnostisch ist, sind so viele Variablen an der Beantwortung der Frage beteiligt, und da es sich um Sicherheit handelt, ist es höchstwahrscheinlich am besten für SF (außerdem gibt es keine Regel, die besagt, dass ein Webmaster dies hat ein Programmierer zu sein)
Mark Henderson
Ich persönlich halte dies für eine legitime Frage für diese Site, obwohl sie ziemlich "programmierbezogen" ist. Ich habe jedoch auch eine Frage gestellt, die im Sinne des Webmasters "programmierbezogen" war, und sie wurde geschlossen, weil sie nicht zum Thema gehörte ( webmasters.stackexchange.com/questions/527/… ). Ich bin mir nicht sicher, in welche Richtung es gehen soll, aber Konsistenz ist erforderlich.
Mark Hatton

Antworten:

2

Sie sollten in Betracht ziehen, Sitzungen zu verwenden, um diese Art von Szenario zu behandeln.

Sitzungen funktionieren im Allgemeinen, indem eine eindeutige GUID für die Authentifizierung des Benutzers generiert und in einem Cookie auf dem lokalen Computer des Benutzers gespeichert oder von Seite zu Seite über die URL weitergegeben wird.

Diese Sitzungs-GUID verweist auf einen Datei- oder Datenbankeintrag auf dem Server, der dann von Ihrem Quellcode gelesen und beschrieben werden kann, indem die GUID im Cookie / URL des Benutzers mit der GUID der Datei oder des Datenbankeintrags verknüpft wird, die Ihre Daten enthält.

Es ist im Allgemeinen sicher, vertraulichere Daten (z. B. die Benutzer-ID) in Sitzungen zu speichern, da für den Endbenutzer außer der Sitzungs-GUID nichts sichtbar ist.

In den meisten webbasierten Sprachen ist eine Art Sitzungsverwaltung integriert.

Nat Ryall
quelle
Der Kontext meiner Frage war die Idee einer Funktion "Erinnere dich an mich, wenn ich das nächste Mal deine Website besuche". Wenn ich zur Authentifizierung Sitzungsvariablen verwenden würde, würde dies nur für die aktuelle Browsersitzung dauern.
Jessegavin
1

Speichern Sie zwei Cookies:

  • UserId: enthält die Benutzer-ID
  • Password: enthält die SHA1 des Benutzerpassworts

Sehr einfach und sicher. Denken Sie an das Attribut HttpOnly .

Thomas Bonini
quelle
1
Hum, ein Hash des Passworts in einem Cookie? Das ist nicht sicher, weil jemand einen Wörterbuchangriff verwenden kann.
1
Nicht wenn er ein Salz benutzt;) ...
Wookai
1
Ich würde mich immer noch sehr schmutzig fühlen, wenn ich ein Passwort irgendwo anders als in der Datenbank als Hash speichern würde. Wie wäre es mit einer zufälligen Sitzungskennung plus der Benutzer-ID? Die Sitzungskennung ändert sich, wenn die Sitzung abläuft oder sich der Benutzer abmeldet. Außerdem können Sie den Benutzer am Back-End abmelden, indem Sie seine Sitzungskennung in der Datenbank zerstören. Sie können niemanden zwingen, sich abzumelden, indem Sie sein Passwort zerstören.
Mark Henderson