Cookie con stato partizionato indipendente (CHIPS)

Consentire agli sviluppatori di attivare un cookie per lo spazio di archiviazione "partizionato", con un contenitore di cookie separato per ogni sito di primo livello.

Stato dell'implementazione

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 141.
  • Safari: not supported.

Source

Che cos'è CHIPS?

Cookies Having Independent Partitioned State (CHIPS) consente agli sviluppatori di attivare l'archiviazione partizionata di un cookie, con contenitori di cookie separati per ogni sito di primo livello, migliorando la privacy e la sicurezza degli utenti.

Senza il partizionamento, i cookie di terze parti possono consentire ai servizi di monitorare gli utenti e unire le loro informazioni da molti siti di primo livello non correlati. Questa operazione è nota come monitoraggio cross-site.

CHIPS, l'API Storage Access e i set di siti web correlati sono l'unico modo per leggere e scrivere cookie da contesti cross-site, ad esempio iframe, quando i cookie di terze parti sono bloccati.

Diagramma che mostra come i cookie possono essere condivisi tra due siti web diversi.
Senza il partizionamento dei cookie, un servizio di terze parti può impostare un cookie quando è incorporato in un sito di primo livello e accedere allo stesso cookie quando il servizio è incorporato in altri siti di primo livello.

CHIPS introduce un nuovo attributo dei cookie, Partitioned, per supportare i cookie cross-site partizionati in base al contesto di primo livello.

Intestazione Set-Cookie:

Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;

JavaScript:

document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"

Un cookie di terze parti partizionato è associato al sito di primo livello in cui è stato inizialmente impostato e non è accessibile da altre posizioni. In questo modo, i cookie impostati da un servizio di terze parti possono essere letti solo all'interno dello stesso contesto incorporato del sito di primo livello in cui sono stati impostati inizialmente.

Diagramma che mostra che due diversi siti web che incorporano una terza parte comune non condivideranno più i cookie per quella terza parte.
Con il partizionamento dei cookie, un servizio di terze parti che imposta un cookie quando è incorporato in un sito di primo livello non può accedere allo stesso cookie quando il servizio è incorporato in altri siti di primo livello.

Con i cookie partizionati, quando un utente visita il sito A e i contenuti incorporati del sito C impostano un cookie con l'attributo Partitioned, il cookie viene salvato in un contenitore partizionato designato solo per i cookie impostati dal sito C quando è incorporato nel sito A. Il browser invierà il cookie solo quando il sito di primo livello è A.

Quando l'utente visita un nuovo sito, ad esempio il sito B, un frame C incorporato non riceve il cookie impostato quando C è stato incorporato nel sito A.

Se un utente visita il sito C come sito web di primo livello, nella richiesta non verrà inviato nemmeno il cookie partizionato impostato da C quando era incorporato in A.

Diagramma che mostra che i cookie non vengono condivisi quando la stessa terza parte è incorporata in due siti web diversi.
Con il partizionamento dei cookie, un servizio di terze parti che imposta un cookie quando è incorporato in un sito non può accedere allo stesso cookie anche quando gli utenti visitano il servizio come sito di primo livello.

Casi d'uso

Ad esempio, il sito retail.example potrebbe voler collaborare con un servizio di terze parti support.chat.example per incorporare una casella di chat di assistenza sul proprio sito. Molti servizi di chat incorporabili oggi si basano sui cookie per salvare lo stato.

Diagramma che mostra un sito web con un widget di chat incorporato
Sito di primo livello retail.example che incorpora un servizio di terze parti support.chat.example.

Senza la possibilità di impostare un cookie cross-site, support.chat.example dovrebbe trovare metodi alternativi, spesso più complessi, per memorizzare lo stato. In alternativa, dovrebbe essere incorporato nella pagina di primo livello, il che introduce rischi perché consente allo script support.chat.example di disporre di privilegi elevati su retail.example, ad esempio la possibilità di accedere ai cookie di autenticazione.

CHIPS offre un'opzione più semplice per continuare a utilizzare i cookie cross-site, senza i rischi associati ai cookie non partizionati.

Alcuni casi d'uso di CHIPS includono scenari in cui le risorse secondarie cross-site richiedono una nozione di sessione o stato persistente limitato all'attività di un utente su un singolo sito di primo livello, ad esempio:

  • Incorporamenti di chat di terze parti
  • Incorporamenti di mappe di terze parti
  • Incorporamenti di pagamenti di terze parti
  • Bilanciamento del carico CDN delle risorse secondarie
  • Fornitori di CMS headless
  • Domini sandbox per la pubblicazione di contenuti utente non attendibili (come googleusercontent.com e githubusercontent.com)
  • CDN di terze parti che utilizzano i cookie per pubblicare contenuti con controllo dell'accesso in base allo stato di autenticazione sul sito proprietario (ad esempio, immagini del profilo sui siti di social media ospitati su CDN di terze parti)
  • Framework frontend che si basano su API remote che utilizzano i cookie nelle loro richieste
  • Annunci incorporati che richiedono uno stato con ambito per editore (ad esempio, acquisizione delle preferenze degli utenti per gli annunci per quel sito web)

Perché CHIPS utilizza un modello di partizionamento con attivazione

Laddove l'accesso ai cookie di terze parti non partizionati è bloccato, sono stati tentati altri approcci alla partizione.

Firefox ha annunciato che partiziona tutti i cookie di terze parti per impostazione predefinita nella modalità ETP Strict e nella modalità di navigazione privata, in modo che tutti i cookie cross-site vengano partizionati in base al sito di primo livello. Tuttavia, il partizionamento dei cookie senza il consenso di terze parti può causare bug imprevisti, poiché alcuni servizi di terze parti hanno creato server che si aspettano un cookie di terze parti non partizionato.

Safari ha precedentemente tentato di partizionare i cookie in base all'euristica, ma alla fine ha scelto di bloccarli del tutto, citando la confusione degli sviluppatori come uno dei motivi. Di recente, Safari ha espresso interesse per un modello basato sull'attivazione.

Ciò che distingue CHIPS dalle implementazioni esistenti dei cookie partizionati è l'attivazione esplicita di terze parti. I cookie devono essere impostati con un nuovo attributo per essere inviati nelle richieste cross-party una volta che i cookie di terze parti (non partizionati) sono obsoleti.

Sebbene i cookie di terze parti esistano ancora, l'attributo Partitioned consente di attivare un tipo di comportamento dei cookie più restrittivo e sicuro. CHIPS è un passo importante per aiutare i servizi a effettuare una transizione senza intoppi verso un futuro senza cookie di terze parti.

Oggi, i cookie sono associati al nome host o al dominio del sito che li ha impostati, ovvero alla chiave host.

Ad esempio, per i cookie di https://support.chat.example, la chiave host è ("support.chat.example").

Nell'ambito di CHIPS, i cookie che attivano il partizionamento avranno una doppia chiave basata sulla chiave host e sulla chiave di partizione.

La chiave di partizione di un cookie è il sito (schema e dominio registrato) dell'URL di primo livello visitato dal browser all'inizio della richiesta all'endpoint che ha impostato il cookie.

Nell'esempio precedente, in cui https://support.chat.example è incorporato in https://retail.example, l'URL di primo livello è https://retail.example.

In questo caso, la chiave di partizione è ("https", "retail.example").

Allo stesso modo, la chiave di partizione di una richiesta è il sito dell'URL di primo livello che il browser visita all'inizio di una richiesta. I browser devono inviare un cookie con l'attributo Partitioned solo nelle richieste con la stessa chiave di partizione del cookie.

Ecco come appare la chiave del cookie nell'esempio precedente prima e dopo CHIPS.

Il sito A e il sito incorporato C condividono un cookie partizionato. Quando non è incorporato, il sito C non può accedere al cookie partizionato.
Il sito A e il sito C incorporato condividono un cookie con stato partizionato. Quando non è incorporato, il sito C non può accedere al cookie partizionato.

Prima di CHIPS

key=("support.chat.example")

Dopo CHIPS

key={("support.chat.example"),("https", "retail.example")}

Progettazione della sicurezza

Per incoraggiare buone pratiche di sicurezza, con CHIPS i cookie vengono impostati e inviati solo tramite protocolli sicuri.

  • I cookie partizionati devono essere impostati con Secure.
  • Quando imposti i cookie partizionati, ti consigliamo di utilizzare il prefisso __Host- per associarli al nome host (e non al dominio registrabile).

Esempio:

Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

Alternative a CHIPS

L'API Storage Access e i set di siti web correlati (RWS) associati sono meccanismi della piattaforma web per consentire l'accesso limitato ai cookie cross-site per scopi specifici rivolti agli utenti.

Si tratta di alternative al partizionamento CHIPS in cui è necessario l'accesso a cookie non partizionati tra siti.

Prendi in considerazione l'API Storage Access e gli insiemi di siti web correlati nelle situazioni in cui devi rendere disponibile lo stesso cookie a un servizio incorporato in più siti correlati.

CHIPS consente a un servizio di fungere da componente isolato su più siti, in cui lo stesso cookie non deve essere disponibile su più siti. Se il servizio imposta un cookie partizionato, la sua chiave di partizione sarà il sito di primo livello e il cookie non sarà disponibile per altri siti che utilizzano anche il servizio.

La progettazione degli insiemi di siti web correlati si basa sull'API Storage Access e non si integra con il partizionamento CHIPS. Se hai un caso d'uso che si basa su una partizione dei cookie condivisa tra i siti all'interno di un RWS, puoi fornire esempi e feedback sul problema GitHub.

Demo

Questa demo ti mostrerà come funzionano i cookie partizionati e come puoi esaminarli in DevTools.

Il sito A incorpora un iframe del sito B che utilizza JavaScript per impostare due cookie: uno partizionato e uno non partizionato. Il sito B mostra tutti i cookie accessibili da quella posizione utilizzando document.cookie.

Quando i cookie di terze parti vengono bloccati, il sito B potrà impostare e accedere al cookie con l'attributo Partitioned solo nel contesto cross-site.

Quando i cookie di terze parti sono consentiti, il sito B può anche impostare e accedere al cookie non partizionato.

Sito A e sito B
A sinistra: i cookie di terze parti sono bloccati. A destra: i cookie di terze parti sono consentiti.

Prerequisiti

  1. Chrome 118 o versioni successive.
  2. Visita la pagina chrome://flags/#test-third-party-cookie-phaseout e attiva questa impostazione.

Utilizzare DevTools per esaminare i cookie partizionati

  1. Visita la pagina https://chips-site-a.glitch.me.
  2. Premi Control+Shift+J (o Command+Option+J su Mac) per aprire Chrome DevTools.
  3. Fai clic sulla scheda Applicazione.
  4. Vai a Applicazione > Spazio di archiviazione > Cookie.
  5. Fai clic su https://chips-site-b.glitch.me.

DevTools mostrerà tutti i cookie dell'origine selezionata.

Cookie del sito B nella scheda Applicazione di DevTools.

Il sito B può impostare il cookie partizionato solo nel contesto tra siti, mentre il cookie non partizionato verrà bloccato:

  • Dovresti visualizzare __Host-partitioned-cookie con la chiave di partizione del sito di primo livello https://chips-site-a.glitch.me.
Chiave di partizionamento per __Host-partitioned-cookie.
  1. Fai clic su Vai al sito B.
  2. In DevTools, vai ad Applicazione > Spazio di archiviazione > Cookie.
  3. Fai clic su https://chips-site-b.glitch.me.
Sito B
A livello principale, il sito B può vedere tutti i cookie, partizionati e non partizionati

In questo scenario, poiché ti trovi sul sito B nel contesto di primo livello, puoi impostare e accedere a entrambi i cookie:

  • unpartitioned-cookie ha una chiave di partizione vuota.
  • Il cookie __Host-partitioned-cookie ha la chiave di partizione https://chips-site-b.glitch.me.
Cookie del sito B nella scheda Applicazione di DevTools quando si visita B come sito di primo livello. __Host-partitioned-cookie has the partition key https://chips-site-b.glitch.me.

Se torni al sito A, unpartitioned-cookie ora è memorizzato nel browser, ma non sarà accessibile dal sito A.

  1. Fai clic su Vai al sito A.
  2. Fai clic sulla scheda Rete.
  3. Fai clic su https://chips-site-b.glitch.me.
  4. Fai clic sulla scheda Cookie.

Sul sito A, dovresti vedere __Host-partitioned-cookie con la chiave di partizione del sito di primo livello https://chips-site-a.glitch.me.

Scheda Rete che mostra i cookie dell'iframe del sito B accessibili quando è incorporato nel sito A.

Se selezioni Mostra richieste di cookie filtrate, DevTools mostrerà che il cookie non partizionato è bloccato, evidenziato in giallo con una descrizione comando: "Questo cookie è stato bloccato a causa delle preferenze dell'utente".

Scheda Rete che mostra i cookie bloccati dall'iframe del sito B.

In Applicazione > Spazio di archiviazione > Cookie, se fai clic su https://chips-site-b.glitch.me viene visualizzato:

  • unpartitioned-cookie con la chiave di partizione vuota.
  • __Host-partitioned-cookie cookie con la chiave di partizione https://chips-site-a.glitch.me.
Cookie del sito B nella scheda Applicazione di DevTools. Il cookie __Host-partitioned-cookie ha la chiave di partizione https://chips-site-a.glitch.me. unpartitioned-cookie viene visualizzato, ma non è accessibile all'iframe del sito B quando è incorporato nel sito A.

Cancella cookie

Per reimpostare la demo, cancella tutti i cookie del sito:

  • Premi Control+Shift+J (o Command+Option+J su Mac) per aprire Chrome DevTools.
  • Fai clic sulla scheda Applicazione.
  • Vai a Applicazione > Spazio di archiviazione > Cookie.
  • Fai clic con il tasto destro del mouse su https://chips-site-b.glitch.me.
  • Fai clic su Cancella.

Risorse