Come leggere un cookie HttpOnly utilizzando JavaScript


94

Esiste un modo per leggere un cookie protetto con JavaScript?
Ho provato a farlo usando document.cookiee per quanto posso vedere in questo articolo sui cookie sicuri e sul flag HttpOnly , non posso accedere a un cookie sicuro in questo modo.

Qualcuno può suggerire una soluzione alternativa?


1
Dal wiki : un cookie protetto viene utilizzato solo quando un browser visita un server tramite HTTPS.
Pavel Hodek

6
@Pavel Hodek Questa è la bandiera sbagliata. Il flag del cookie "sicuro" non ha nulla a che fare con il flag di sicurezza HTTPOnly. Hanno un pessimo sistema di denominazione.
torre

1
Il titolo di queste domande dovrebbe essere modificato per includere il flag "HttpOnly". Allo stato attuale, sembra che la domanda riguardi il flag "Secure".
Tom

Risposte:


130

Browser diversi consentono misure di sicurezza diverse quando è impostato il flag HTTPOnly . Ad esempio Opera e Safari non impediscono a javascript di scrivere sul cookie. Tuttavia, la lettura è sempre vietata sull'ultima versione di tutti i principali browser.

Ma ancora più importante perché vuoi leggere un HTTPOnlycookie? Se sei uno sviluppatore, disabilita semplicemente il flag e assicurati di testare il tuo codice per xss. Ti consiglio di evitare di disabilitare questo flag se possibile. IlHTTPOnly flag e il "flag sicuro" (che forza l'invio del cookie tramite https) dovrebbero essere sempre impostati.

Se sei un aggressore , allora vuoi dirottare una sessione . Ma c'è un modo semplice per dirottare una sessione nonostante la HTTPOnlybandiera. Puoi ancora guidare nella sessione senza conoscere l'id della sessione. Il worm MySpace Samy ha fatto proprio questo. Ha usato un XHR per leggere un CSRF token e quindi eseguire un'attività autorizzata. Pertanto, l'aggressore potrebbe fare quasi tutto ciò che l'utente connesso potrebbe fare.

Le persone hanno troppa fiducia nella HTTPOnlybandiera, XSS può ancora essere sfruttato. È necessario impostare barriere attorno alle funzioni sensibili. Ad esempio, la password di modifica archiviata dovrebbe richiedere la password corrente. La capacità di un amministratore di creare un nuovo account dovrebbe richiedere un captcha, che è una tecnica di prevenzione CSRF che non può essere facilmente aggirata con un XHR .


Potresti approfondire la cosa del verme? Quel collegamento non funziona e non ha capito molto anche da Internet. Grazie.
Abhishek Jebaraj

@Abhishek Jebaraj Se non capisci il worm sammy, o i token CSRF, prova prima a capire i limiti della politica
torre

voglio ottenere la data di scadenza di un cookie solo http, come posso farlo
PirateApp

50

Il punto centrale dei cookie HttpOnly è che non è possibile accedervi da JavaScript.

L'unico modo (ad eccezione dello sfruttamento dei bug del browser) affinché il tuo script li legga è di avere uno script cooperante sul server che leggerà il valore del cookie e lo visualizzerà come parte del contenuto della risposta. Ma se puoi e vorresti farlo, perché usare i cookie HttpOnly in primo luogo?


Potresti volerlo testare per sapere se il browser dell'utente gestisce HttpOnly per i cookie correttamente prima di consentire all'utente di utilizzare il tuo sito dal browser specifico. Sto cercando un esempio che possa garantire il supporto del browser del flag HttpOnly. Anche MS consiglia di farlo, ma non ci sono ulteriori consigli su come:
Mitigare

Ho trovato che consigliano la versione bianca del browser. Potrei sbagliarmi, ma non sarebbe un modo conveniente per controllare invece il supporto da javascript? Potresti suggerire qualche drawbaks su questo?
Ursegor

0

Solo lo scopo dei cookie è di essere inaccessibili dallo script, quindi NON PUOI.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.