Warum zeigt document.cookie nicht alle Cookies für die Site an?

75

Ich gehe zu einem Forum, das vBulletin 3.8 verwendet. Wenn ich mich anmelde, benutze ich Firebug, um zu sehen, welche Cookies gesetzt wurden. Ich sehe diese Cookies:

__utmb, __utmc, __utma, __utmz, bbsessionhash, vbseo_loggedin, bbpassword, bbuserid, bblastactivity, bblastvisit

Sie hatten alle einen Wertesatz und die Domain war identisch.

Aber wenn ich JavaScript verwende, um sie anzuzeigen, wurden nur diese Cookies angezeigt:

__utmb, __utmc, __utma, __utmz, vbseo_loggedin, bblastactivity, bblastvisit

In Firebug sehe ich nur diese drei Cookies: bbsessionhash, bbpasword und bbuserid, die tatsächlich gesetzt wurden. HTTPOnly in der Spalte HTTPOnly. Was bedeutet das und ist das der Grund, warum ich diese Cookies in JavaScript nicht sehen kann document.cookie?

kiennt
quelle

Antworten:

115

Von http://en.wikipedia.org/wiki/HTTP_cookie :

Cookies sind für clientseitige Programme wie JavaScript nicht direkt sichtbar, wenn sie mit dem HttpOnly-Flag gesendet wurden. Aus Sicht des Servers besteht der einzige Unterschied zum Normalfall darin, dass der Kopfzeile des Set-Cookies ein neues Feld hinzugefügt wird, das die Zeichenfolge "HttpOnly" enthält:

Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.example.net; HttpOnly

Wenn der Browser ein solches Cookie empfängt, soll er es wie gewohnt in den folgenden HTTP-Austauschen verwenden, es jedoch nicht für clientseitige Skripte sichtbar machen. Das HttpOnlyFlag ist nicht Teil eines Standards und nicht in allen Browsern implementiert.

Update von 2017: Seit 2009 ist viel Zeit vergangen, und das HttpOnlyHeader-Flag wurde zum Standard, der in Abschnitt 5.2.6 von RFC6265 definiert ist. Die Speichersemantik wird im selben Dokument beschrieben (suchen Sie nach "Nur-http-Flag"). im gesamten RFC-Text).

Es gibt keine Möglichkeit, über HttpOnly"Nicht-HTTP" -APIs, z. B. JavaScript , auf etwas über die Cookies zuzugreifen . Es ist beabsichtigt, solche Cookies weder zu lesen noch zu schreiben.

Drdaeman
quelle
7
Aber gibt es eine Möglichkeit, über das Frontend auf diese Cookies zuzugreifen? Die Chrome-Erweiterung des Cookie-Managers zeigt sie an, document.cookie jedoch nicht.
Silver Ringvee
5
@ SilverRingvee, sorry, aber es gibt keine. Wenn es einen Weg gibt, sollte ein Browser-Sicherheitsfehler (und ein ziemlich schwerwiegender) gemeldet und behoben werden. Browser-Erweiterungen sind jedoch verschiedene Aspekte - sie haben höhere Berechtigungen als die Website und haben Zugriff auf die vorab festgelegten APIs (z chrome.cookies.getAllfür Chrome ), die alle Cookies sehen kann.
Drdaeman
@SilverRingvee, haben Sie eine Möglichkeit gefunden, mit dem HTTPOnly-Flag auf die Cookies zuzugreifen?
Rewanth Cool
2
@RewanthCool und ich haben jetzt erkannt, dass es ein schrecklich schlechtes Sicherheitsproblem wäre, wenn es möglich wäre.
Silver Ringvee
@SilverRingvee Ich habe versucht, eine XMLHTTPRequest zu verwenden, aber keine Verwendung. Hier ist die Referenz: forums.asp.net/t/… . Schau dir das an !!
Rewanth Cool