Pliki cookie z niezależnym stanem partycji (CHIPS)

Zezwalanie deweloperom na umieszczanie plików cookie w „partycjonowanym” miejscu na dane z oddzielnym „kontenerem” dla każdej witryny najwyższego poziomu.

Stan wdrożenia

Browser Support

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

Source

Co to jest CHIPS?

Pliki cookie z niezależnym stanem partycji (ang. Cookies Having Independent Partitioned State, CHIPS) umożliwiają deweloperom umieszczanie plików cookie w partycjonowanym magazynie z oddzielnymi plikami cookie na każdą witrynę najwyższego poziomu, co zwiększa prywatność i bezpieczeństwo użytkowników.

Bez partycjonowania pliki cookie innych firm mogą umożliwiać usługom śledzenie użytkowników i łączenie ich informacji z wielu niezwiązanych ze sobą witryn najwyższego poziomu. Jest to tzw. śledzenie w witrynach.

Gdy pliki cookie innych firm są zablokowane, interfejsy CHIPS, Storage Access APIzestawy powiązanych witryn są jedynym sposobem na odczytywanie i zapisywanie plików cookie z kontekstów międzywitrynowych, takich jak iframe.

Diagram pokazujący, jak pliki cookie mogą być udostępniane 2 różnym witrynom
Bez podziału plików cookie usługa innej firmy może ustawić plik cookie w ramach jednej witryny najwyższego poziomu i uzyskać do niego dostęp, gdy usługa jest umieszczona w innych witrynach najwyższego poziomu.

Technologia CHIPS wprowadza nowy atrybut pliku cookie (Partitioned), aby obsługiwać pliki cookie z innych witryn, które są dzielone według kontekstu najwyższego poziomu.

Nagłówek Set-Cookie:

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

JavaScript:

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

Partycjonowany plik cookie innej firmy jest powiązany z witryną najwyższego poziomu, w której został początkowo ustawiony, i nie można uzyskać do niego dostępu z innych miejsc. Dzięki temu pliki cookie ustawione przez usługę innej firmy mogą być odczytywane tylko w ramach tego samego kontekstu wbudowanego w witrynie najwyższego poziomu, w której zostały początkowo ustawione.

Schemat pokazujący, że 2 różne witryny zawierające element pochodzący od wspólnego podmiotu zewnętrznego nie będą już udostępniać plików cookie tego podmiotu.
W przypadku podziału plików cookie usługa innej firmy, która ustawia plik cookie w ramach jednej witryny najwyższego poziomu, nie może uzyskać dostępu do tego samego pliku cookie, gdy usługa jest umieszczona w innych witrynach najwyższego poziomu.

Gdy użytkownik odwiedza witrynę A, a wbudowane treści z witryny C ustawiają plik cookie z atrybutem Partitioned, plik cookie jest zapisywany w podziale jar przeznaczonym tylko do plików cookie ustawianych przez witrynę C, gdy jest ona wbudowana w witrynę A. Przeglądarka wyśle ten plik cookie tylko wtedy, gdy witryna najwyższego poziomu to A.

Gdy użytkownik odwiedza nową witrynę, np. witrynę B, wbudowany element C frame nie otrzyma pliku cookie, który został ustawiony, gdy element C został wbudowany w witrynie A.

Jeśli użytkownik odwiedza witrynę C jako witrynę najwyższego poziomu, w tym żądaniu nie zostanie też wysłany plik cookie partycjonowany, który został ustawiony w witrynie C, gdy została ona umieszczona w witrynie A.

Diagram pokazujący, że pliki cookie nie są udostępniane, gdy ta sama usługa zewnętrzna jest umieszczona w 2 różnych witrynach
Dzięki partycjonowaniu plików cookie usługa zewnętrzna, która ustawia plik cookie podczas umieszczania go w witrynie, nie może uzyskać dostępu do tego samego pliku cookie, nawet jeśli użytkownicy odwiedzają usługę jako witrynę najwyższego poziomu.

Przypadki użycia

Na przykład witryna retail.example może współpracować z usługą zewnętrzną support.chat.example, aby osadzić w niej okno czatu z zespołem pomocy. Wiele usług czatu, które można umieszczać w witrynach, korzysta obecnie z plików cookie do zapisywania stanu.

Schemat przedstawiający stronę internetową z widżetem czatu
Witryna najwyższego poziomu retail.example z wbudowaną usługą zewnętrzną support.chat.example.

Bez możliwości ustawienia pliku cookie na wielu stronach support.chat.example musiałby znaleźć alternatywne, często bardziej złożone metody przechowywania stanu. Alternatywnie skrypt musi być umieszczony na stronie najwyższego poziomu, co wiąże się z ryzykiem, ponieważ pozwala skryptowi support.chat.example uzyskać podwyższone uprawnienia w retail.example, np. możliwość dostępu do plików cookie uwierzytelniania.

CHIPS to prostsza opcja umożliwiająca dalsze korzystanie z plików cookie śledzących w wielu witrynach bez ryzyka związanego z plikami cookie bez partycji.

Przykładowe przypadki użycia CHIPS to wszystkie scenariusze, w których subresursy w wielu witrynach wymagają pewnego rodzaju sesji lub trwałego stanu, który jest ograniczony do aktywności użytkownika w pojedynczej witrynie najwyższego poziomu, np.:

  • Wstawione czaty innych firm
  • Umieszczenie mapy innej firmy
  • Umieszczone płatności innych firm
  • Równoważenie obciążenia CDN w przypadku zasobów podrzędnych
  • Dostawcy CMS bez interfejsu graficznego
  • domeny piaskownicy do wyświetlania treści użytkowników, którym nie ufamy (np. googleusercontent.com i githubusercontent.com);
  • zewnętrzne sieci CDN, które używają plików cookie do wyświetlania treści, do których dostęp jest kontrolowany przez stan uwierzytelniania w witrynie własnej (np. zdjęcia profilowe w mediach społecznościowych hostowanych w zewnętrznych sieciach CDN);
  • frameworki frontendu, które korzystają z interfejsów API zdalnych używających plików cookie w żądaniach;
  • Wbudowane reklamy, które wymagają stanu ograniczonego do wydawcy (np. rejestrowanie preferencji reklam użytkowników w przypadku danej witryny)

Dlaczego CHIPS używa modelu partycjonowania z wymuszoną zgodą

W przypadku zablokowanego dostępu do niepartycjonowanych plików cookie innych firm wypróbowano kilka innych metod partycjonowania.

Firefox ogłosił, że domyślnie dzieli wszystkie pliki cookie innych firm w trybie ETP (Enhanced Tracking Protection) i w trybie przeglądania prywatnego, więc wszystkie pliki cookie między witrynami są dzielone według witryn najwyższego poziomu. Jednak podział plików cookie bez zgody osób trzecich może prowadzić do nieoczekiwanych błędów, ponieważ niektóre usługi innych firm mają serwery, które oczekują niespartitionowanego pliku cookie.

Safari próbowało już dzielić pliki cookie na podstawie heurystyki, ale ostatecznie zdecydowało się na ich całkowite zablokowanie, podając jako jeden z powodów dezorientację deweloperów. Niedawno Safari wyraziło zainteresowanie modelem opartym na zgodzie użytkownika.

Różnica między CHIPS a dotychczasowymi implementacjami partycjonowanych plików cookie polega na tym, że w przypadku CHIPS użytkownik musi wyrazić zgodę na gromadzenie danych przez osoby trzecie. Aby pliki cookie można było wysyłać w żądaniach między domenami po wycofaniu (niepartycjonowanych) plików cookie innych firm, muszą one być ustawione z nowym atrybutem.

Pliki cookie innych firm nadal istnieją, ale atrybut Partitioned umożliwia stosowanie bardziej restrykcyjnego i bezpiecznego typu plików cookie. CHIPS to ważny krok, który pomoże usługom płynnie przejść na przyszłość bez plików cookie innych firm.

Obecnie pliki cookie są kluczowane na podstawie nazwy hosta lub domeny witryny, która je ustawiła, czyli ich klucza hosta.

Na przykład w przypadku plików cookie z domeny https://support.chat.example kluczem hosta jest ("support.chat.example").

W ramach CHIPS pliki cookie, które kwalifikują się do partycjonowania, będą miały podwójny klucz: klucz hosta i klucz partycji.

Klucz partycji pliku cookie to witryna (schemat i dostępna do rejestracji domena) najwyższego poziomu adresu URL, który przeglądarka odwiedziła na początku żądania do punktu końcowego, który ustawił plik cookie.

W przykładzie, w którym https://support.chat.example jest wbudowany w https://retail.example, adres URL najwyższego poziomu to https://retail.example.

W tym przypadku kluczem partycji jest ("https", "retail.example").

Podobnie klucz partycji żądania to witryna najwyższego poziomu, którą przeglądarka odwiedza na początku żądania. Przeglądarki muszą wysyłać plik cookie z atrybutem Partitioned tylko w żądaniach z tym samym kluczem partycji.

Oto jak klucz pliku cookie w przykładzie z poprzedniego akapitu wyglądał przed i po wprowadzeniu CHIPS.

Witryna A i umieszczona w niej witryna C mają wspólny oddzielony plik cookie. Gdy nie jest umieszczona, witryna C nie ma dostępu do pliku cookie podzielonego na części.
Witryna A i umieszczona w niej witryna C mają wspólny podzielony plik cookie. Gdy nie jest umieszczona, witryna C nie ma dostępu do podzielonego pliku cookie.

Przed CHIPS

key=("support.chat.example")

Po CHIPS

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

Projektowanie zabezpieczeń

Aby zachęcić do stosowania dobrych metod zabezpieczania, w ramach CHIPS pliki cookie są ustawiane i wysyłane tylko za pomocą bezpiecznych protokołów.

  • Pliki cookie z oddzielonymi wartościami muszą być ustawiane za pomocą funkcji Secure.
  • Zalecamy, aby podczas konfigurowania plików cookie z partycjami używać prefiksu __Host-, aby były one powiązane z nazwą hosta (a nie z domeną rejestrowaną).

Przykład:

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

Alternatywy dla CHIPS

Interfejs Storage Access API i powiązane z nim zestawy powiązanych witryn (RWS) to mechanizmy platformy internetowej, które umożliwiają ograniczony dostęp do plików cookie w różnych witrynach w określonych celach związanych z użytkownikami.

Są to alternatywne rozwiązania do partycjonowania CHIPS, gdy wymagany jest dostęp do plików cookie bez partycji w różnych witrynach.

Rozważ użycie interfejsu Storage Access API i zbiorów powiązanych witryn w sytuacjach, gdy chcesz, aby ten sam plik cookie był dostępny dla usługi, która jest osadzona w wielu powiązanych witrynach.

Technologia CHIPS umożliwia usługom działanie jako izolowane komponenty w wielu witrynach, w których nie trzeba używać tego samego pliku cookie. Jeśli usługa ustawia plik cookie podzielony, jego kluczem partycji będzie witryna najwyższego poziomu, a plik cookie nie będzie dostępny dla innych witryn, które również korzystają z tej usługi.

Projekt zestawów powiązanych witryn opiera się na interfejsie Storage Access API i nie integruje się z partycjonowaniem CHIPS. Jeśli masz przypadek użycia, który opiera się na współdzielonej partycji plików cookie w różnych witrynach w ramach RWS, możesz przekazać przykłady i opinie na temat zgłoszenia na GitHubie.

Prezentacja

W tym demo omówimy działanie plików cookie podzielonych na partycje i sposób ich sprawdzania w Narzędziach deweloperskich.

Witryna A umieszcza element iframe z witryny B, który używa kodu JavaScript do ustawienia 2 plików cookie: podzielonego i niepodzielonego. Witryna B wyświetla wszystkie pliki cookie dostępne z tego miejsca za pomocą document.cookie.

Gdy pliki cookie innych firm są zablokowane, witryna B będzie mogła ustawić i uzyskać dostęp do pliku cookie z atrybutem Partitioned tylko w kontekście międzywitrynowym.

Gdy pliki cookie innych firm są dozwolone, witryna B może również ustawić plik cookie bez partycji i do niego uzyskać dostęp.

Witryna A i witryna B
Po lewej stronie: pliki cookie innych firm są zablokowane. Prawy: pliki cookie innych firm są dozwolone.

Wymagania wstępne

  1. Chrome 118 lub nowsza.
  2. Otwórz chrome://flags/#test-third-party-cookie-phaseout i włącz to ustawienie

Sprawdzanie partycjonowanych plików cookie za pomocą Narzędzi deweloperskich

  1. Wejdź na stronę https://chips-site-a.glitch.me.
  2. Aby otworzyć Narzędzia dla programistów, naciśnij Control+Shift+J (lub Command+Option+J na Macu).
  3. Kliknij kartę Application (Aplikacja).
  4. Kliknij Aplikacja > Pamięć > Pliki cookie.
  5. Kliknij https://chips-site-b.glitch.me.

Narzędzia dla programistów wyświetlą wszystkie pliki cookie z wybranej domeny.

Pliki cookie z witryny B na karcie Aplikacja w Narzędziach deweloperskich

Witryna B może ustawiać tylko partycjonowany plik cookie w kontekście wielu witryn, a niepartycjonowany plik cookie zostanie zablokowany:

  • Powinieneś zobaczyć __Host-partitioned-cookie z kluczem partycji witryny najwyższego poziomu https://chips-site-a.glitch.me.
Klucz partycji dla pliku cookie partycjonowanego przez hosta.
  1. Kliknij Otwórz witrynę B.
  2. W DevTools kliknij Aplikacja > Pamięć > Pliki cookie.
  3. Kliknij https://chips-site-b.glitch.me.
Lokalizacja B
Na najwyższym poziomie witryna B może zobaczyć wszystkie pliki cookie – zarówno te podzielone, jak i niepodzielone

W tym scenariuszu, ponieważ znajdujesz się w witrynie B w kontekście najwyższego poziomu, witryna ta może ustawiać i uzyskiwać dostęp do obu plików cookie:

  • unpartitioned-cookie ma pusty klucz partycji.
  • Plik cookie __Host-partitioned-cookie ma klucz partycji https://chips-site-b.glitch.me.
Pliki cookie z witryny B na karcie Aplikacja w Narzędziach deweloperskich podczas odwiedzania witryny B jako witryny najwyższego poziomu. Plik cookie __Host-partitioned-cookie ma klucz partycji https://chips-site-b.glitch.me.

Jeśli wrócisz do witryny A, unpartitioned-cookie zostanie zapisana w przeglądarce, ale nie będzie dostępna z witryny A.

  1. Kliknij Otwórz witrynę A.
  2. Kliknij kartę Sieć.
  3. Kliknij https://chips-site-b.glitch.me.
  4. Kliknij kartę Pliki cookie.

W witrynie A powinieneś/powinnaś zobaczyć __Host-partitioned-cookie z kluczem partycji witryny najwyższego poziomu https://chips-site-a.glitch.me.

Karta Sieć z plikami cookie z elementu iframe witryny B, które są dostępne, gdy element jest umieszczony w witrynie A.

Jeśli zaznaczysz pokaż odfiltrowane pliki cookie żądania, w Narzędziach deweloperskich zobaczysz, że plik cookie bez partycji jest zablokowany. Jest on wyróżniony na żółto i oznaczony etykietą „Ten plik cookie został zablokowany ze względu na preferencje użytkownika”.

Karta Sieć z zablokowanymi plikami cookie z elementu iframe witryny B.
.

W sekcji Aplikacja > Pamięć > Pliki cookie kliknięcie https://chips-site-b.glitch.mepozwala wyświetlić:

  • unpartitioned-cookie z pustym kluczem partycji.
  • __Host-partitioned-cookie plik cookie z kluczem partycji https://chips-site-a.glitch.me.
Pliki cookie z witryny B na karcie Aplikacja w Narzędziach deweloperskich. Plik cookie __Host-partitioned-cookie ma klucz partycji https://chips-site-a.glitch.me. unpartitioned-cookie jest widoczny, ale nie jest dostępny dla elementu iframe witryny B, gdy jest on umieszczony w witrynie A.

Usuń pliki cookie

Aby zresetować wersję demonstracyjną, usuń wszystkie pliki cookie powiązane z tą witryną:

  • Aby otworzyć Narzędzia dla programistów, naciśnij Control+Shift+J (lub Command+Option+J na Macu).
  • Kliknij kartę Application (Aplikacja).
  • Kliknij Aplikacja > Pamięć > Pliki cookie.
  • Kliknij https://chips-site-b.glitch.me prawym przyciskiem myszy.
  • Kliknij Wyczyść.

Zasoby