2009-06-20 2 views
34

Vado a un forum che utilizza vBulletin 3.8. Quando effettuo l'accesso, utilizzo firebug per vedere quali cookie sono stati impostati. Vedo questi biscotti:Perché document.cookie non mostra tutti i cookie per il sito?

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

Tutti avevano un valore impostato, e il dominio è stato identico.

Ma quando io uso Javascript per vederlo loro, è visto solo questi cookie:

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

In Firebug, vedo solo questi tre cookie: bbsessionhash, bbpasword e bbuserid, che sono stati effettivamente impostati. HTTPSolo nella colonna HTTPOnly. Che cosa significa ed è la ragione per cui non riesco a vedere quei cookie in JavaScript usando document.cookie?

risposta

54

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

cookie non sono direttamente visibili a programmi lato client, come JavaScript se sono stati inviati con la bandiera HttpOnly. Dal punto di vista del server, l'unica differenza rispetto alla normale caso è che il set-cookie riga di intestazione viene aggiunto un nuovo campo contenente la stringa `HttpOnly ':

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

Quando il browser riceve un tale cookie , deve usarlo come solito nelle seguenti piattaforme HTTP, ma non per renderlo visibile agli script lato client . Il flag HttpOnly non fa parte di alcun standard e non è implementato in tutti i browser.

Aggiornamento dal 2017: un sacco di tempo era passato dal 2009, e HttpOnly la bandiera di intestazione è diventato uno standard, definito nella section 5.2.6 of RFC6265, con la semantica di conservazione descritte nello stesso documento (cercare "http -solo-bandiera "su tutto il testo RFC).

C'è no modo per accedere a qualsiasi cosa sui cookie HttpOnly da API "non HTTP", ad es. JavaScript. In base alla progettazione, né la lettura, né la scrittura di tali cookie è possibile.

+1

Ma c'è un modo per accedere a quei cookie in qualche modo dal frontend? L'estensione Chrome di Gestione cookie li sta mostrando, ma document.cookie no. –

+2

@SilverRingvee, scusa ma non ce n'è. Se c'è un modo, è un bug di sicurezza del browser (e piuttosto grave) che dovrebbe essere segnalato e risolto. Le estensioni del browser sono diverse, tuttavia - hanno privilegi più elevati rispetto al sito web e hanno accesso alle API priliveged (es. ['chrome.cookies.getAll' per Chrome] (https://developer.chrome.com/extensions/cookies#method-getAll)) che può vedere tutti i cookie. – drdaeman

+0

@SilverRingvee, hai trovato un modo per accedere ai cookie con flag HTTPOnly? –