Attributi di sicurezza dei cookie

Vediamo adesso alcuni attributi dei cookie che possono essere importanti per migliorare la sicurezza dell'applicazione.

HttpOnly

Come visto nel capitolo su XSS, i cookie possono essere un target molto interessante per un attaccante, specialmente quando utilizzati per identificare la sessione corrente. Ottenere il cookie di un utente significherebbe, di fatto, poterlo impersonare per tutta la durata della sessione associata a tale cookie.

Al fine di impedire l'accesso a un cookie tramite l'API Document.cookie è possibile settare il flag HttpOnly relativo a un cookie. Quest'opzione mitiga l'impatto di una XSS: se l'attaccante ha esecuzione di javascript arbitrario nel contesto del client attaccato, non può comunque rubarne i cookie HttpOnly. I cookie HttpOnly vengono normalmente inviati al server con le richieste.

Secure

Un cookie con l'attributo Secure viene inviato solo nelle richieste HTTPS. Non viene mai inviato in richieste HTTP eccetto in quelle verso localhost, rendendo così più complesso l'accesso a un cookie di sessione attraverso attacchi del tipo man-in-the-middle. I cookie Secure non possono essere impostati da siti insicuri.

Site

All'interno del contesto dei cookie, il Site è composto dal Top Level Domain (TLD), come ad esempio .com, e da un livello addizionale del nome del dominio. Inoltre, viene preso in considerazione anche il protocollo: una richiesta da http://app.example.com verso https://app.example.com viene trattata come cross-site dalla maggior parte dei browser

same site

SameSite

L'attributo SameSite di un cookie permette al server che lo imposta di specificare se / quando inviare i cookie in richieste cross-site. Questo meccanismo può aiutare a mitigare attacchi CSRF, istruendo il browser a non inviare i cookie in richieste cross-site secondo delle date regole.

L'attributo SameSite può avere tre valori:

  • Strict
  • Lax
  • None

Un cookie con l'attributo SameSite=Strict non verrà inviato in nessuna richiesta cross-site. Questo significa che se il site del target della richiesta non è lo stesso del sito che sta effettuando la richiesta, i cookie non verranno inseriti. È consigliabile utilizzare cookie con questo attributo quando la presenza degli stessi permette all'utente di effettuare azioni sensibili, come ad esempio accedere a risorse accessibili solo a utenti autenticati.

Un cookie con l'attributo SameSite=Lax verrà inviato in richieste cross-site solo se queste due condizioni sono rispettate:

  • La richiesta è una richiesta GET
  • La richiesta origina dalla navigazione dell'utente, come ad esempio il click su un link Questo significa che i cookie non sono inseriti in nessuna richiesta POST né nelle richieste GET originate da iframe, script, tag immagini, etc.

Un cookie con l'attributo SameSite=None verrà inviato in ogni richiesta verso il site d'origine, anche se effettuate da siti completamente diversi da quello target. Un cookie con attributo SameSite=None deve necessariamente avere l'attributo Secure, altrimenti verrà rifiutato dal Browser.