Spiegazione dei cookie SameSite

Supporto dei browser

  • 51
  • 16
  • 60
  • 13

Fonte

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) consente di dichiarare se i cookie sono limitati a un contesto proprietario o dello stesso sito. È utile capire esattamente cosa significa "sito" in questo punto. Il sito è la combinazione del suffisso di dominio e della parte di dominio immediatamente precedente. Ad esempio, il dominio www.web.dev fa parte del sito web.dev.

Termine chiave: se l'utente si trova su www.web.dev e richiede un'immagine a static.web.dev, si tratta di una richiesta same-site.

L'elenco di suffissi pubblici definisce quali pagine vengono conteggiate come presenti sullo 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 possono essere conteggiati come siti separati.

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

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

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

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

Set-Cookie: promo_shown=1; SameSite=Strict

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

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 puoi utilizzare la foto del tuo gatto e fornire 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, se il lettore segue il link a cat.html sul tuo sito, la richiesta include il cookie.

Ti consigliamo di utilizzare SameSite in questo modo, impostare i cookie che incidono sulla visualizzazione del sito web su Lax e i cookie relativi alle azioni degli utenti su Strict.

Puoi anche impostare SameSite su None per indicare che il cookie deve essere inviato in tutti i contesti. Se fornisci un servizio utilizzato da altri siti, ad esempio widget, contenuti incorporati, programmi di affiliazione, pubblicità o accesso a più siti, utilizza None per assicurarti che il tuo intento sia chiaro.

Tre cookie etichettati come Nessuno, Rigoroso 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

  • 80
  • 86
  • x

L'attributo SameSite è ampiamente supportato, ma non è stato ampiamente adottato. In passato, l'impostazione dei cookie senza SameSite comportava l'invio predefinito in tutti i contesti, il che espone gli utenti a rischio di CSRF e fuga accidentale di informazioni. Per incoraggiare gli sviluppatori a dichiarare la propria intenzione e offrire agli utenti un'esperienza più sicura, la proposta di IETF, Incrementally Better Cookies, introduce due modifiche principali:

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

Entrambe queste modifiche sono compatibili con le versioni precedenti dei browser che hanno implementato correttamente la versione precedente dell'attributo SameSite, nonché con i browser che non supportano le versioni precedenti di SameSite. Il loro scopo è ridurre la dipendenza degli sviluppatori sul comportamento predefinito dei browser rendendo espliciti il comportamento dei cookie e l'uso previsto. Tutti i client che non riconoscono SameSite=None devono ignorarlo.

SameSite=Lax per impostazione predefinita

Se invii un cookie senza specificarne l'attributo SameSite, il browser lo tratta come se fosse impostato su SameSite=Lax. Ti consigliamo comunque di impostare esplicitamente SameSite=Lax per rendere l'esperienza utente più coerente su tutti i browser.

SameSite=None deve essere sicuro

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

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 impostando network.cookie.sameSite.noneRequiresSecure in about:config.

Ti consigliamo anche di aggiornare i cookie esistenti in Secure il prima possibile. Se fai affidamento su servizi che forniscono contenuti di terze parti sul tuo sito, assicurati che il fornitore di servizi aggiorni i cookie e aggiorni eventuali snippet o dipendenze sul sito per assicurarti che utilizzi il nuovo comportamento.

Per ulteriori dettagli sull'aggiornamento dei cookie in modo da gestire correttamente queste modifiche a SameSite=None e le differenze nel comportamento del browser, consulta l'articolo di follow-up Ricette per cookie SameSite.

Grazie per il contributo e il feedback di Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner e Vivek Sekhar.

Immagine Cookie hero di Pille-Riin Priske su Unsplash