Lesen eines HttpOnly-Cookies mit JavaScript

85

Gibt es eine Möglichkeit, ein sicheres Cookie mit JavaScript zu lesen?
Ich habe versucht, dies mit zu tun, document.cookieund soweit ich in diesem Artikel über sichere Cookies und das HttpOnly-Flag sehen kann , kann ich auf diese Weise nicht auf ein sicheres Cookie zugreifen.

Kann jemand eine Problemumgehung vorschlagen?

tzam
quelle
1
Aus dem Wiki : Ein sicheres Cookie wird nur verwendet, wenn ein Browser einen Server über HTTPS besucht.
Pavel Hodek
6
@ Pavel Hodek Das ist die falsche Flagge. Das "sichere" Cookie-Flag hat nichts mit dem HTTPOnly-Sicherheitsflag zu tun. Sie haben ein schreckliches Benennungssystem.
Turm
1
Der Titel dieser Fragen sollte geändert werden, um das Flag "HttpOnly" aufzunehmen. So wie es aussieht, geht es anscheinend um die "Secure" -Flagge.
Tom

Antworten:

118

Unterschiedliche Browser aktivieren unterschiedliche Sicherheitsmaßnahmen, wenn das HTTPOnly- Flag gesetzt ist. Zum Beispiel verhindern Opera und Safari nicht, dass Javascript in das Cookie schreibt. Das Lesen ist jedoch in der neuesten Version aller gängigen Browser immer verboten.

Aber was noch wichtiger ist, warum möchten Sie einen HTTPOnlyCookie lesen ? Wenn Sie Entwickler sind, deaktivieren Sie einfach das Flag und stellen Sie sicher, dass Sie Ihren Code auf xss testen. Ich empfehle, dass Sie dieses Flag möglichst nicht deaktivieren. Das HTTPOnlyFlag und das "sichere Flag" (das das Senden des Cookies über https erzwingt) sollten immer gesetzt sein.

Wenn Sie ein Angreifer sind , möchten Sie eine Sitzung entführen . Aber es gibt eine einfache Möglichkeit, eine Sitzung trotz der HTTPOnlyFlagge zu entführen . Sie können weiterhin an der Sitzung teilnehmen, ohne die Sitzungs-ID zu kennen. Der MySpace Samy-Wurm hat genau das getan. Es verwendete eine XHR , um ein CSRF- Token zu lesen und dann eine autorisierte Aufgabe auszuführen. Daher kann der Angreifer fast alles tun, was der angemeldete Benutzer tun kann.

Die Leute haben zu viel Vertrauen in die HTTPOnlyFlagge, XSS kann immer noch ausgenutzt werden. Sie sollten Barrieren für sensible Funktionen einrichten. Zum Beispiel sollte für das eingereichte Änderungskennwort das aktuelle Kennwort erforderlich sein. Für die Fähigkeit eines Administrators, ein neues Konto zu erstellen, sollte ein Captcha erforderlich sein. Hierbei handelt es sich um eine CSRF-Verhinderungstechnik , die mit einem XHR nicht einfach umgangen werden kann .

Turm
quelle
Könnten Sie bitte das Wurm-Ding näher erläutern? Dieser Link funktioniert nicht und hat auch aus dem Internet nicht viel verstanden. Danke dir.
Abhishek Jebaraj
@Abhishek Jebaraj Wenn Sie den Sammy-Wurm oder die CSRF-Token nicht verstehen, versuchen Sie zunächst, die Grenzen der Richtlinie mit demselben Ursprung zu
Turm
49

Der springende Punkt bei HttpOnly-Cookies ist, dass JavaScript nicht auf sie zugreifen kann.

Die einzige Möglichkeit (außer zum Ausnutzen von Browserfehlern) für Ihr Skript, diese zu lesen, besteht darin, auf dem Server ein kooperierendes Skript zu haben, das den Cookie-Wert liest und ihn als Teil des Antwortinhalts zurückgibt. Aber wenn Sie das können und würden, warum sollten Sie dann überhaupt HttpOnly-Cookies verwenden?

Ilmari Karonen
quelle
Möglicherweise möchten Sie es testen, um festzustellen, ob der Benutzerbrowser HttpOnly für Cookies ordnungsgemäß verarbeitet, bevor der Benutzer Ihre Website über den jeweiligen Browser verwenden kann. Ich suche nach einem Beispiel, das die Browserunterstützung des HttpOnly-Flags sicherstellen kann. MS rät auch dazu, aber es gibt keine weiteren Ratschläge zum Wie: Mildern von XSS mit HttpOnly
Ursegor
Ich fand, dass sie Browserversion White Listing empfehlen. Ich könnte mich irren, aber wäre es nicht eine bequeme Möglichkeit, stattdessen die Unterstützung von Javascript zu überprüfen? Könnten Sie dazu irgendwelche Drawbaks vorschlagen?
Ursegor
-5

Eine der Möglichkeiten ist die Verwendung des Safari-Webinspektors. Auf der Registerkarte "Speicher" können Sie alle Cookies anzeigen, ob httpOnly oder nicht. Wählen Sie einfach den Cookie-Befehl + C aus, um ihn zu kopieren.

Sobald Sie die Zeichenfolge haben, können Sie sie problemlos mit einem beliebigen Cookie-Parser oder einfachem Javascript zurücklesen.

Geben Sie hier die Bildbeschreibung ein

pankajdoharey
quelle
1
FF und Chrome können dies auch. Sie sind nicht dasselbe, was OP will.
Imba-tjd
@ imba-tjd Nun, Sie haben Recht, aber ich habe zu der Zeit Safari verwendet, also könnte ich nur dafür bürgen.
Pankajdoharey