Cookie con stato partizionato indipendente (CHIPS)

Consenti agli sviluppatori di attivare i cookie per lo spazio di archiviazione "partizionato", con un barattolo di cookie separato per sito di primo livello.

Stato implementazione

Supporto dei browser

  • 114
  • 114
  • x
  • x

Fonte

Cosa sono i CHIPS?

Cookie con stato partizionato indipendente (CHIPS) consente agli sviluppatori di scegliere un cookie per lo spazio di archiviazione partizionato, con contenitori di cookie separati per 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 tra siti.

I browser sono a buon punto per eliminare gradualmente i cookie di terze parti non partizionati, pertanto i CHIPS, l'API Storage Access e gli set di siti web correlati saranno l'unico modo per leggere e scrivere cookie da contesti tra siti, come gli iframe, quando i cookie di terze parti sono bloccati.

Diagramma che mostra come è possibile condividere i piatti di cucina tra due siti web diversi.
Senza il partizionamento dei cookie, un servizio di terze parti può impostare un cookie quando viene 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 per i cookie, Partitioned, per supportare i cookie in più siti che sono partizionati per contesto di primo livello.

Intestazione Imposta 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 è collegato al sito di primo livello in cui è inizialmente impostato e non è accessibile altrove. In questo modo, i cookie impostati da un servizio di terze parti possono essere letti solo nello stesso contesto incorporato del sito di primo livello in cui erano stati inizialmente impostati.

Diagramma che mostra che due siti web diversi che incorporano una terza parte comune non condivideranno più i cookie per la terza parte in questione.
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 dal sito C impostano un cookie con l'attributo partizionato, il cookie viene salvato in un contenitore partizionato designato solo per i cookie che il sito C imposta quando è incorporato nel sito A. Il browser invierà quel cookie solo se 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, il cookie partizionato impostato da C quando è stato incorporato in A non verrà inviato nemmeno in quella richiesta.

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 della chat di assistenza nel sito. Oggi molti servizi di chat incorporabili si basano sui cookie per salvare lo stato.

Diagramma che mostra un sito web con un widget della chat associato
Vendita al dettaglio del sito di primo livello.esempio 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 archiviare lo stato. In alternativa, dovrebbe essere incorporato nella pagina di primo livello, il che comporta dei rischi perché consente allo script support.chat.example di avere privilegi elevati su retail.example, come la possibilità di accedere ai cookie di autenticazione.

I CHIPS offrono un'opzione più semplice per continuare a utilizzare i cookie tra siti, senza i rischi associati ai cookie non partizionati.

I casi d'uso di esempio per i CHIPS includono scenari in cui le sottorisorse tra siti richiedono una nozione di sessione o di stato persistente con ambito all'attività di un utente su un singolo sito di primo livello, come 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 sottorisorse
  • Fornitori CMS headless
  • Domini sandbox per la pubblicazione di contenuti utente non attendibili (ad esempio googleusercontent.com e githubusercontent.com)
  • CDN di terze parti che utilizzano cookie per pubblicare contenuti il cui accesso è controllato dallo stato di autenticazione sul sito proprietario (ad esempio, immagini del profilo su siti di social media ospitati su CDN di terze parti).
  • Framework frontend che si basano su API remote che utilizzano cookie nelle richieste
  • Annunci incorporati che richiedono un ambito di stato per publisher (ad esempio, acquisizione delle preferenze annunci degli utenti per quel sito web)

Perché CHIPS utilizza un modello di partizionamento con attivazione

Mentre i browser stanno eliminando gradualmente i cookie di terze parti non partizionati, sono stati tentati un paio di altri approcci al partizionamento.

Firefox ha annunciato che sta partizionando tutti i cookie di terze parti per impostazione predefinita in modalità ETP Strict e privata, in modo che tutti i cookie tra siti siano partizionati dal sito di primo livello. Tuttavia, il partizionamento dei cookie senza un'opzione di attivazione di terze parti può causare bug imprevisti, dal momento che alcuni servizi di terze parti hanno creato server che si aspettano un cookie di terze parti non partizionato.

In precedenza Safari ha provato a eseguire il partizionamento dei cookie in base a un'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 su attivazione.

Ciò che distingue i CHIPS dalle implementazioni esistenti di cookie partizionati è l'attivazione di terze parti. I cookie devono essere impostati con un nuovo attributo per poter essere inviati su richieste tra parti 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. I CHIPS sono un passaggio importante per aiutare i servizi a effettuare una transizione senza problemi a un futuro senza cookie di terze parti.

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

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

Nella sezione CHIPS, i cookie che attivano il partizionamento avranno una doppia chiave sulla chiave host e sulla chiave di partizione.

Una chiave di partizione del cookie è il sito (programma e dominio registrabile) dell'URL di primo livello che il browser stava visitando all'inizio della richiesta all'endpoint che ha impostato il cookie.

Nell'esempio precedente, dove 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").

Analogamente, la chiave di partizione di una richiesta è il sito dell'URL di primo livello visitato dal browser 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 l'aspetto della chiave cookie nell'esempio precedente prima e dopo i CHIPS.

Il sito A e il sito 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 partizionato. Quando non è incorporato, il sito C non può accedere al cookie partizionato.

Prima dei CHIPS

key=("support.chat.example")

Dopo i CHIPS

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

Progettazione della sicurezza

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

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

Esempio:

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

Alternative ai CHIPS

L'API Storage Access e i Set di siti web correlati (RWS) associati sono meccanismi della piattaforma web che consentono di abilitare l'accesso limitato ai cookie tra siti per finalità specifiche rivolte agli utenti.

Queste sono alternative al partizionamento CHIPS in cui è richiesto l'accesso a cucine tra siti non partizionate.

Considera l'API Storage Access e gli insiemi di siti web correlati nelle situazioni in cui è necessario che lo stesso cookie sia disponibile per un servizio incorporato in più siti correlati.

I CHIPS consentono a un servizio di agire come componente isolato su più siti, laddove non è necessario che lo stesso cookie sia 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 anche per altri siti che utilizzano il servizio.

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

Demo

Questa demo illustra come funzionano i cookie partizionati e come puoi ispezionarli in DevTools.

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

Quando i cookie di terze parti sono bloccati, il sito B potrà impostare e accedere al cookie solo con l'attributo Partitioned nel contesto tra siti.

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: sono consentiti i cookie di terze parti.

Prerequisiti

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

Utilizza DevTools per esaminare i cookie partizionati

  1. Visita il sito https://chips-site-a.glitch.me.
  2. Premi Control+Shift+J (o Command+Option+J su Mac) per aprire DevTools.
  3. Fai clic sulla scheda Applicazione.
  4. Vai ad 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 DevTools.

Il sito B può impostare il cookie partizionato solo in un contesto tra siti; il cookie non partizionato verrà bloccato:

  • Dovresti vedere __Host-partitioned-cookie con la chiave di partizione del sito di primo livello https://chips-site-a.glitch.me.
Chiave di partizione 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
Al livello superiore, il sito B può visualizzare tutti i cookie: partizionati e non partizionati

In questo scenario, dato che ti trovi sul sito B in un contesto di primo livello, il sito può 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 dell'applicazione DevTools quando visiti B come sito di primo livello. __Il cookie-partitioned-host ha la chiave di partizione https://chips-site-b.glitch.me.

Se torni al sito A, ora unpartitioned-cookie è 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.

Mentre ti trovi 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 a cui sono accessibili quando sono incorporati nel sito A.

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

La scheda Rete mostra i cookie bloccati dall'iframe del sito B.

In Applicazione > Archiviazione > Cookie, facendo clic su https://chips-site-b.glitch.me verrà visualizzato:

  • unpartitioned-cookie con la chiave di partizione vuota.
  • Cookie __Host-partitioned-cookie con la chiave di partizione https://chips-site-a.glitch.me.
Cookie del sito B nella scheda Applicazione 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 sul sito A.

Cancella cookie

Per reimpostare la demo, cancella tutti i cookie per il sito:

  • Premi Control+Shift+J (o Command+Option+J su Mac) per aprire DevTools.
  • Fai clic sulla scheda Applicazione.
  • Vai ad 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