Frage

Ich betrachte die klassische ‚erinnern-me‘ Checkbox auf meinem Webapp implementieren der authentifizierte Benutzer zu erlauben, zu sein ‚erinnert‘, wenn er zurückkommt, meine Website zu besuchen.

Gmail , Facebook und andere haben diese Art von Funktion, aber ich bin mir nicht sicher, wie es sicher sein kann.

Ein Java-Framework wie Spring Security verwendet eine ‚Hash-Based Token Ansatz‘. Das Token, das erzeugt wird (mit Benutzername, Passwort, ExpirationTime und privateKey) in den Cookies des Kunden gespeichert ‚token = 567whatever567‘. Das Token wird dann wiederverwendet zur erneuten Authentifizierung der Benutzer das nächste Mal, wenn er zurückkommt.

Ich bin von der Tatsache betroffen, dass selbst wenn der Anmeldevorgang unter einer https-Verbindung geschehen ist, auf jeder nachfolgenden HTTP-Anforderung wird das Cookie auf dem Netz unverschlüsselt gesendet werden.

Im Grunde alle kann das Token gelesen und wiederverwenden zu authentifizieren.

Ich versuche, einen Blick darauf zu werfen, wie Google Mail oder Facebook sind diese Funktionalität zu implementieren. Ich kann ein Plätzchen wie ‚Präsenz = DJ267619445G09H0L15228675 .....‘ in FB, andere in Google Mail sehen.
Ich bin mir nicht sicher, ob sie einen anderen Trick gegen jemanden zu schützen, verwenden, die versucht, einen anderen Benutzer zu verkörpern.

Ich werde versuchen, mich mit etwas zu imitieren wie cURL zu sehen, ob sie nur eine bestimmte Verwendung Token, um den Benutzer zu erinnern.
Wenn sie es sieht aus wie ein großes Sicherheitsproblem für mich. Vielleicht Facebook nicht (ich weiß nicht davon kümmern), aber mit Google Mail, wenn Sie nicht gesetzt ‚ Verwenden sie immer https ‘eine hTTP-Verbindung verwendet wird, und es wird Ihre unverschlüsselten Token über das Internet senden.
Was denken Sie?

Ich habe auch bemerkt, dass Facebook-Benutzername / Passwort-Felder unter http ausgesetzt sind (nicht https). Ich frage mich auch in dieser Hinsicht: Sind alle Websites aussetzt Benutzername / Passwort-Feld über http unsicheren ‚von Natur aus‘. Sobald die Anfrage über gesendet http gibt es keine ‚Umleitung zu https‘, die die Anmeldeinformationen sichtbar in der Welt "Problem beheben können.

Danke

Bearbeiten :
Meine Sorgen waren gut gegründet http://codebutler.com/
Dank der Firesheep Schöpfer für das Problem hervorheben !!!

War es hilfreich?

Lösung

Es ist nicht so ein Problem einer erinnern-me zu implementieren. Was Sie tun müssen, ist die Sitzung am Leben lang zu halten (und das Cookie gesetzt lange dauern). Google Mail werden Sie auch nach bestimmten Zeitraum ausloggen (ich glaube, es gibt zwei Wochen oder einen Monat). Allerdings müssen Sie erkennen, dass die gleiche Sitzung länger offen zu halten, die Möglichkeit erhöht, in sie kapern. Als Gegenmaßnahme müssen Sie die Stärke Ihrer Sitzungs-ID erhöhen. Sitzungskennung ist derjenige, der in dem Cookie (oder in der URI, wie sie üblicherweise in einiger Software gesehen als "file.php? PHPSESSID = 1234 ...").

Der Schlüssel ist, einen starken Sitzungs-ID zu erhalten. Zum Beispiel in Google Mail, haben Sie ein Cookie GX mit einem Wert ähnlich wie

DQAAAJoAAAA8mnjaAwgkS7y8Ws5MYCl-PAQLp9ZpMXpGKR47z4L9mlBH-4qEyApAtFbnLkzv1pPqxua1hOWMGiKYpBZr-h7Icyb-NUUg2ZW_nUFIymvw9KjmjSECYTowbCsDerkAxCzSDa83b5YC1mykPv1a9ji4znt6Fsna-AKgNTntvmUxeJ92ctsSlg9iGySEmXnisVyyJiQvI8jzbZqSpE_N2RKZ

Der Grund, warum Session Hijacking so ziemlich unmöglich ist, weil die Sitzungskennung so stark ist, und weil die Website nutzt überall HTTPS. Niemand kann erraten oder auf andere Weise erhalten Sie Ihre Sitzungskennung (so kann es nicht Hijack in der Sitzung). Auf einem kurzen Blick, über die Sitzungskennung scheint etwas ~ 1250-Bit Festigkeit, 1 * 10 ^ 376 verschiedene Möglichkeiten. Niemand kann das erraten.

Natürlich wird es immer potentielle Möglichkeiten, um noch Hijack in die Sitzung. Öffnen Sie zum Beispiel XSS-Schwachstellen die Tür Weg, um Ihre Cookies zu erhalten und damit Ihre Sitzungs-ID, aber das ist nicht Ihre Sitzungen in keiner Weise Schuld, und hat nichts mit einer „erinnern-me“ zu tun.

  

Ich bin von der Tatsache betroffen, dass selbst wenn der Anmeldevorgang unter einer https-Verbindung geschehen ist, auf jeder nachfolgenden HTTP-Anforderung wird das Cookie auf dem Netz unverschlüsselt gesendet werden.

Wenn Sie das Cookie sicher Flag auf true, während in HTTPS gesetzt ist, wird das Cookie nie, wann Zugriff auf die Website über HTTP gesendet werden. Es ist ein Muss für HTTPS-only-Sites zu tun.

Im Allgemeinen scheinen die Menschen nur die Verwendung von HTTPS für die Log-in-Seite, die falsch ist. Wenn man wirklich Sorgen, soll er HTTPS verwendet auf der ganzen Seite. Ansonsten ist es unmöglich, alle Session Hijacking Versuche zu verhindern.

Warum viele immer noch HTTPS verwenden nur für den Login-Teil? Wahrscheinlich, weil sie nicht wissen, was in dem Spiel steht ist, oder weil es zu CPU schwer HTTPS überall zu verwenden. Allerdings ist es immer noch besser HTTPS für die verwenden Log-in als es nicht überall verwenden - weil sie die Anmeldeinformationen verschlüsselt (also nur die Sitzungskennung später gestohlen werden können, nicht die tatsächlichen Anmeldeinformationen bei der Anmeldung auf)

  

Vielleicht nicht Facebook (Ich kümmere mich nicht davon), aber mit Google Mail, wenn Sie nicht gesetzt ‚Use immer https‘ eine HTTP-Verbindung verwendet wird, und es wird Ihre unverschlüsselten Token über das Internet senden.   Was denken Sie?

Ich denke, der Wert in allen Fällen auf HTTPS Standard sollte, wenn möglich. Der einzige wirkliche Grund, warum HTTPS nicht verwenden ist Geld (= Leistung / Hardware).

Andere Tipps

Es ist im Allgemeinen eine Replay-Attacke genannt. Der Angreifer Replays eine Anfrage der gleichen Anmeldeinformationen (z Cookie), dass es von Ihnen gestohlen hat, und ist in der Lage, Sie zu imitieren. Der XSS-Angriff ist nur eine Variante davon, aber vermeidbar (zum Beispiel unter Verwendung von Httponly).

Der einzige Weg, die meisten Replay-Attacken zu mildern ist https überall. Das sollte fern halten die meisten der neugierigen Blicken.

Es gibt viele Präventionstechniken zu .

Es gibt auch Hardware-Geräte, die einen besseren Job machen, als Sie in der Software-Hack aus, Ihren Server in dem Prozess zu verlangsamen, und Sie werden wahrscheinlich etwas falsch gemacht. Spezielle Hardware kann eine viel bessere Arbeit von Tracking-Anfragen in Echtzeit tun und zu bestimmen, dass das gleiche Token wird von vielen verschiedenen IP-Adressen verwendet werden, die alle zur gleichen Zeit, und schneller als ein einzelner menschlicher Bediener sollte Anfrage können.

In ASP.NET 2.0 +, wenn Formularauthentifizierung verwenden, können Sie requireSSL='true' angeben, um anzuzeigen, dass Browser nur das Authentifizierungscookie senden, wenn eine https-Verbindung hergestellt ist. Siehe diesen Msdn Artikel für weitere Informationen über die Formularauthentifizierung zu sichern.


Der einzige Grund, nicht remember me zu ermöglichen, wenn Sie eine Bank- oder ähnliche Anwendung sind. Wenn Sie nicht, folgen Sie einfach ein paar einfache Regeln:

  1. Wenn Sie remember me haben, setzen Sie einen Ablauf auf den Keks höchstens 30 Tage in der Zukunft und nicht den Wert schieben. Erzwingen der Benutzer Login einmal im Monat nicht so schlecht ist.
  2. Jede sensible Vorgänge erfordert ein Passwort. Bei der Fakturierung Aktualisierung, Kreditkarten oder Kontodaten immer Neu-Anforderungs-Passwort der Nutzer. Die wahrscheinlichste Form von Missbrauch ist in der Regel über den gleichen Computer, dass die Person verwendet, sondern sorgt auch, dass sogar ein Cookie gestohlen Authentifizierung auf sie selbst kann nicht tun, zu viel Schaden. Sie können mein Gleichgewicht sehen, aber man kann nichts übertragen.

Vereinbaren Sie mit den meisten Kommentaren oben. Wenn Sie um die Sicherheit besorgt sind, sollten Sie -

a) Verwenden Sie https im gesamten Gebäude. Auch vor kurzem mit https standardmäßig eingeschaltet GMail - siehe http : //gmailblog.blogspot.com/2010/01/default-https-access-for-gmail.html

b) Stellen Sie die sichere Flagge in Ihrem Session-Cookie, den Browser zu verhindern, dass es über eine HTTP-Verbindung gesendet werden.

c) Fix XSS in Ihrer Anwendung. Wenn Sie xss Probleme haben, Ihre Implementierung von ‚remember me‘ wird immer unsicherer sein. Siehe OWASP XSS Prävention Spickzettel.

einschließlich der IP-Adresse in der Sitzungskennung wird nicht zu Hilfe. Dadurch wird die ‚remember me Funktionalität‘ ziemlich nutzlos machen, und es braucht nicht viel Sicherheit hinzuzufügen. Ich weiß sicher, Google keine IP-Adressen setzt in seiner Sitzungskennung.

Die einzige Möglichkeit, völlig sichere Website zu machen, ist https überall zu ermöglichen. Sie sind richtig, können Cookies schnupperte und später impersonate verwendet werden.

Es gibt ein paar Möglichkeiten von Sitzung verhindert Hijacking , wie die IP-Adresse des Clients zu speichern, der die Sitzung eröffnet. Zusätzliche Daten müssen serverseitige gespeichert werden Sitzungen, um zu überprüfen, auch ohne automatische Login-Funktion. Es ist besser, ein nonce für die Token zu verwenden (oder zumindest Basis es auf nicht-geheimen Daten ) anstelle der Hash-Benutzernamen und Passwort, als Angreifer möglicherweise könnte einen Angriff montieren Sie die Authentifizierungsinformationen angesichts der Hash-Wert.

finden

Wenn Sie an der Quelle suchen die Facebook, Gmail und wahrscheinlich auch andere Sites' Login-Formulare, die Login-Formular-Aktion verwendet HTTPS, die dann zu einer nicht sicheren Seite umleitet, sobald Login erfolgreich ist.

1 / Wenn der Benutzer Check "remember me": Sie speichern einen Hash alle Informationen über seinen Computer: IP, Browser, Betriebssystem, Sprache etc ... und schreiben Sie diesen Hash in seine Cookies mit seiner ID 2 / wenn der Benutzer zurück, berechnen Sie seinen neuen Hash. Sie vergleichen diesen Wert mit dem Wert in dem empfangenen Cookie, und den Wert in der Datenbank (für die angegebene id). wenn sie alle gleich sind, können Sie den Benutzer authentifizieren.

Ist es klar?

Https kann nichts tun, wenn Sie einen XSS-Angriff (besten Weg Cookie zu stehlen) haben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top