Spiegazione dei cookie SameSite

Supporto dei browser

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

Origine

Ogni cookie contiene una coppia chiave-valore insieme a una serie di attributi che controllano quando e dove viene utilizzato il cookie.

L'introduzione dell'attributo SameSite (definito in RFC6265bis) ti consente di dichiarare se il tuo cookie è limitato a un contesto proprietario o allo stesso sito. È utile capire esattamente cosa si intende per "sito" in questo caso. Il sito è la combinazione del suffisso del dominio e della parte del dominio immediatamente precedente. Ad esempio, il dominio www.web.dev fa parte del sito web.dev.

Termine chiave: se l'utente è su www.web.dev e richiede un'immagine da static.web.dev, si tratta di una richiesta all'interno dello stesso sito.

L'elenco dei suffissi pubblici definisce quali pagine vengono considerate come appartenenti allo stesso sito. Non dipende solo da domini di primo livello come .com, ma può includere anche servizi come github.io. In questo modo, your-project.github.io e my-project.github.io vengono conteggiati come siti distinti.

Termine chiave: se l'utente è su your-project.github.io e richiede un'immagine da my-project.github.io, si tratta di una richiesta cross-site.

Utilizza l'attributo SameSite per dichiarare l'utilizzo dei cookie

L'attributo SameSite di un cookie offre tre diversi modi per controllare questo comportamento. Puoi scegliere di non specificare l'attributo oppure puoi utilizzare Strict o Lax per limitare il cookie alle richieste nello stesso sito.

Se imposti SameSite su Strict, il cookie può essere inviato solo in un contesto proprietario, ovvero se il sito relativo al cookie corrisponde a quello mostrato nella barra degli indirizzi del browser. Pertanto, se il cookie promo_shown è impostato come segue:

Set-Cookie: promo_shown=1; SameSite=Strict

Quando l'utente è sul tuo sito, il cookie viene inviato con la richiesta, come previsto. Tuttavia, se l'utente segue un link che rimanda al tuo sito da un altro, il cookie non viene inviato nella richiesta iniziale. Questo è utile per i cookie relativi a funzionalità che richiedono sempre una navigazione iniziale, ad esempio la modifica di una password o l'acquisto, ma è troppo restrittivo per un cookie come promo_shown. Se il lettore segue il link per accedere al sito, vuole che il cookie venga inviato in modo che la sua preferenza possa essere applicata.

SameSite=Lax consente al browser di inviare il cookie con queste navigazioni di primo livello. Ad esempio, se un altro sito fa riferimento ai contenuti del tuo sito, in questo caso utilizzando la tua foto del gatto e fornendo un link al tuo articolo come segue:

<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>

Con un cookie impostato su Lax come segue:

Set-Cookie: promo_shown=1; SameSite=Lax

Quando il browser richiede amazing-cat.png per il blog dell'altra persona, il tuo sito non invia il cookie. Tuttavia, quando il lettore segue il link a cat.html sul tuo sito, la richiesta include il cookie.

Consigliamo di utilizzare SameSite in questo modo, impostando i cookie che influiscono sulla visualizzazione del sito web su Lax e i cookie relativi alle azioni utente su Strict.

Puoi anche impostare SameSite su None per indicare che vuoi inviare il cookie in tutti i contesti. Se offri un servizio utilizzato da altri siti, come widget, contenuti incorporati, programmi di affiliazione, pubblicità o accesso a più siti, utilizza None per chiarire le tue intenzioni.

Tre cookie etichettati come Nessuno, Lasso o Rigoroso a seconda del contesto
Contrassegna esplicitamente il contesto di un cookie come None, Lax o Strict.

Modifiche al comportamento predefinito senza SameSite

Supporto dei browser

  • Chrome: 80.
  • Edge: 86.
  • Firefox: dietro una bandiera.
  • Safari: non supportato.

L'attributo SameSite è ampiamente supportato, ma non è stato adottato su larga scala. In passato, l'impostazione dei cookie senza SameSite prevedeva l'invio in tutti i contesti, il che rendeva gli utenti vulnerabili a CSRF e a fughe di informazioni involontarie. Per incoraggiare gli sviluppatori a dichiarare le proprie intenzioni e offrire agli utenti un'esperienza più sicura, la proposta IETF, Cookie progressivamente migliori prevede due modifiche chiave:

  • I cookie senza un attributo SameSite vengono trattati come SameSite=Lax.
  • I cookie con SameSite=None devono specificare anche Secure, il che significa che richiedono un contesto sicuro.

Entrambe queste modifiche sono compatibili con le versioni precedenti con i browser che hanno implementato correttamente la versione precedente dell'attributo SameSite, nonché con i browser che non supportano le versioni precedenti di SameSite. Hanno lo scopo di ridurre la dipendenza degli sviluppatori dal comportamento predefinito dei browser rendendo espliciti il comportamento e l'utilizzo previsti dei cookie. Tutti i client che non riconosconoSameSite=None devono ignorarlo.

SameSite=Lax per impostazione predefinita

Se invii un cookie senza specificare il relativo attributo SameSite, il browser tratta il cookie come se fosse impostato su SameSite=Lax. Ti consigliamo comunque di impostare esplicitamente SameSite=Lax per rendere più coerente la tua esperienza utente su più browser.

SameSite=None deve essere sicuro

Quando crei cookie cross-site utilizzando SameSite=None, devi anche impostarli su Secure affinché il browser li accetti:

Set-Cookie: widget_session=abc123; SameSite=None; Secure

Puoi testare questo comportamento a partire da Chrome 76 attivando about://flags/#cookies-without-same-site-must-be-secure e da Firefox 69 impostandonetwork.cookie.sameSite.noneRequiresSecure in about:config.

Ti consigliamo inoltre di aggiornare i cookie esistenti a Secure il prima possibile. Se utilizzi servizi che forniscono contenuti di terze parti sul tuo sito, assicurati che il fornitore di servizi aggiorni i propri cookie e aggiorna gli snippet o le dipendenze sul tuo sito per assicurarti che utilizzi il nuovo comportamento.

Per ulteriori dettagli sull'aggiornamento dei cookie per gestire correttamente queste modifiche a SameSite=None e le differenze nel comportamento del browser, consulta l'articolo successivo Ricette per i cookie SameSite.

Un grazie speciale per i contributi e i feedback di Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner e Vivek Sekhar.

Immagine hero dei cookie di Pille-Riin Priske su Unsplash