Pliki cookie z niezależnym stanem partycji (CHIPS)

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

Stan wdrożenia

Obsługa przeglądarek

  • Chrome: 114.
  • Edge: 114.
  • Firefox Technology Preview: obsługiwana.
  • Safari: nieobsługiwane.

Źródło

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 miejscu na dane 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żliwić usługom śledzenie użytkowników i łączenie ich informacji z wielu niepowiązanych witryn najwyższego poziomu. Jest to tzw. śledzenie w witrynach.

Przeglądarki są na etapie wycofywania niepartycjonowanych plików cookie innych firm, dlatego w przypadku zablokowania plików cookie innych firm jedynym sposobem odczytu i zapisu plików cookie z kontekstów z różnych witryn, takich jak elementy iframe, jest CHIPS, interfejs Storage Access API i Zestawy powiązanych witryn.

Diagram przedstawiający sposób współdzielenia cooków między 2 różnymi stronami internetowymi.
Bez partycjonowania plików cookie usługa innej firmy może ustawić plik cookie, gdy jest umieszczona w jednej witrynie najwyższego poziomu i uzyskiwać dostęp do tego samego pliku cookie, gdy jest osadzona w innych witrynach najwyższego poziomu.

CHIPS wprowadza nowy atrybut pliku cookie, Partitioned, aby obsługiwać pliki cookie z innych witryn, które są dzielone na konteksty 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 ustawiane przez usługę innej firmy mogą być odczytywane tylko w ramach tego samego kontekstu osadzonego w witrynie najwyższego poziomu, w której zostały początkowo ustawione.

Diagram pokazujący, że 2 różne witryny, na których umieszczono tę samą firmę zewnętrzną, nie będą już udostępniać plików cookie tej firmy.
W przypadku partycjonowania plików cookie usługa innej firmy, która ustawia plik cookie po umieszczeniu w jednej witrynie najwyższego poziomu, nie może uzyskać dostępu do tego samego pliku cookie, gdy jest osadzona w innych witrynach najwyższego poziomu.

Gdy użytkownik odwiedza witrynę A, a zawartość z witryny C umieszczona w witrynie A ustawia plik cookie z atrybutem „Partitioned”, plik cookie jest zapisywany w podziale pliku JAR przeznaczonym tylko do plików cookie ustawianych przez witrynę C, gdy jest ona umieszczona w witrynie A. Przeglądarka wyśle go dopiero wtedy, gdy witryną najwyższego poziomu będzie A.

Gdy użytkownik odwiedzi nową witrynę, np. witrynę B, osadzona ramka C nie otrzyma pliku cookie ustawionego, gdy witryna C była umieszczona 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 witryna zewnętrzna jest umieszczona w 2 różnych witrynach.
W przypadku partycjonowania plików cookie usługa innej firmy, która ustawia plik cookie po umieszczeniu w witrynie, nie może uzyskać dostępu do tego samego pliku cookie, nawet jeśli użytkownik odwiedza daną usługę jako witrynę najwyższego poziomu.

Przypadki użycia

Na przykład witryna retail.example może chcieć 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 umieszczoną usługą innej firmy support.chat.example.

Bez możliwości ustawiania plików cookie pochodzących z innych witryn interfejs support.chat.example musiałby znaleźć alternatywne, często bardziej złożone sposoby przechowywania stanu. Trzeba go też umieścić na stronie najwyższego poziomu, co stwarza ryzyko, ponieważ pozwala skryptowi support.chat.example na uzyskanie podwyższonych uprawnień dotyczących Retail.example, takich jak dostęp do plików cookie uwierzytelniających.

CHIPS daje łatwiejszą opcję dalszego korzystania z plików cookie pochodzących z innych witryn bez ryzyka związanego z plikami cookie bez partycjonowania.

Przykładowe przypadki użycia CHIPS obejmują wszystkie scenariusze, w których zasoby podrzędne w różnych witrynach wymagają określenia sesji lub stanu trwałego ograniczonego do aktywności użytkownika w pojedynczej witrynie najwyższego poziomu, na przykład:

  • Umieszczanie czatu innych firm
  • Umieszczone mapy innych firm
  • Umieszczone płatności zewnętrzne
  • Równoważenie obciążenia CDN zasobu podrzędnego
  • Dostawcy CMS bez interfejsu graficznego
  • Domeny w piaskownicy do wyświetlania niezaufanych treści użytkowników (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 front-endu, które korzystają z interfejsów API zdalnych używających plików cookie w żądaniach;
  • Reklamy osadzone, które wymagają zakresu ograniczonego do konkretnego wydawcy (np. rejestrowania preferencji użytkowników dotyczących reklam w przypadku danej witryny).

Dlaczego CHIPS używa modelu partycjonowania wymagającego zgody użytkownika

Przeglądarki wycofują obsługę plików cookie innych firm bez partycjonowania, dlatego wypróbowano kilka innych sposobów na partycjonowanie.

Przeglądarka Firefox ogłosiła, że domyślnie partycjonuje wszystkie pliki cookie innych firm w trybie rygorystycznym ETP i przeglądaniu prywatnym. W rezultacie wszystkie pliki cookie należące do różnych witryn są partycjonowane przez witrynę najwyższego poziomu. Jednak podział plików cookie bez zgody innych firm 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 akceptacji.

To, co odróżnia CHIPS od dotychczasowych implementacji partycjonowanych plików cookie, to zgoda innej firmy. 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.

Chociaż pliki cookie innych firm nadal istnieją, atrybut Partitioned umożliwia wyrażenie zgody na bardziej restrykcyjny i bezpieczniejszy rodzaj działania 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ą powiązane z nazwą hosta lub domeną witryny, która je utworzyła, czyli kluczem hosta.

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

W sekcji CHIPS pliki cookie, które zdecydują się na partycjonowanie, będą miały podwójny klucz hosta i klucz partycji.

Klucz partycji pliku cookie to witryna (schemat i domena, którą można zarejestrować) adresu URL najwyższego poziomu odwiedzana przez przeglądarkę na początku żądania i do punktu końcowego, który ustawił plik cookie.

W poprzednim przykładzie, gdzie https://support.chat.example jest umieszczony w witrynie 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 z adresem URL najwyższego poziomu, którą przeglądarka odwiedza na początku żądania. Przeglądarki mogą wysyłać w żądaniach z tym samym kluczem partycji plik cookie z atrybutem Partitioned co ten plik cookie.

Tak wygląda klucz pliku cookie z wcześniejszego przykładu przed i po CHIPS.

Witryna A i umieszczona witryna C korzystają z tych partycjonowanych plików cookie. Gdy nie jest umieszczony, witryna C nie ma dostępu do podzielonego pliku cookie.
Witryna A i zakodowana witryna C mają wspólny podzielony plik cookie. Gdy plik nie jest umieszczony, witryna C nie ma dostępu do podzielonego pliku cookie.

Przed CHIPS

key=("support.chat.example")

PO CHIPSACH

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

Projektowanie zabezpieczeń

Aby zachęcić użytkowników do przestrzegania dobrych praktyk w zakresie bezpieczeństwa, w przypadku CHIPS pliki cookie są ustawiane i wysyłane tylko za pomocą bezpiecznych protokołów.

  • Pliki cookie partycjonowane muszą być ustawione w zasadzie Secure.
  • Przy ustawianiu partycjonowanych plików cookie zalecamy użycie prefiksu __Host-, aby powiązać je z nazwą hosta (a nie z domeną, którą można zarejestrować).

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 umożliwiające ograniczony dostęp do plików cookie z różnych witryn w określonych celach dla użytkowników.

Są to alternatywy dla partycjonowania CHIPS, gdy wymagany jest dostęp do niepartycjonowanych plików cookie w witrynach.

Rozważ użycie interfejsu Storage Access API i zestawów powiązanych witryn w sytuacjach, gdy ten sam plik cookie musi być dostępny dla usługi osadzonej w wielu powiązanych witrynach.

Dzięki tym elementom usługa może działać jako izolowany komponent w wielu witrynach, przy czym ten sam plik cookie nie musi być dostępny w wielu witrynach. Jeśli usługa ustawia partycjonowany plik cookie, jej kluczem partycji jest witryna najwyższego poziomu. Ten plik cookie nie będzie dostępny dla innych witryn korzystających z tej usługi.

Projekt zestawów powiązanych witryn korzysta z interfejsu Storage Access API i nie integruje się z partycjonowaniem CHIPS. Jeśli Twój przypadek użycia bazuje na współdzielonej partycji plików cookie między witrynami w RWS, możesz podać przykłady i opinię na temat problemu z GitHubem.

Prezentacja

Ta demo pokaże Ci, jak działają partycjonowane pliki cookie i jak możesz je przeglądać w Narzędziach deweloperskich.

Witryna A umieszcza element iframe z witryny B, który używa JavaScriptu do ustawiania dwóch plików cookie: podzielonego na partycje. 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.

Jeśli pliki cookie innych firm są dozwolone, witryna B może też ustawić plik cookie bez partycji i uzyskać do niego dostęp.

Witryna A i B
Po lewej stronie: pliki cookie innych firm są zablokowane. Po prawej: 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

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

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

W Narzędziach deweloperskich wyświetlą się wszystkie pliki cookie z wybranego źródła.

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

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

  • Powinna być widoczna wartość __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 Narzędziach deweloperskich wybierz Aplikacja > Miejsce na dane > Pliki cookie.
  3. Kliknij https://chips-site-b.glitch.me.
Witryna 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 ustawić oba pliki cookie i mieć do nich dostęp:

  • 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, gdy witryna B jest witryną najwyższego poziomu. __Host-partitioned-cookie ma klucz partycji: https://chips-site-b.glitch.me.

Jeśli wrócisz do witryny A, plik unpartitioned-cookie zostanie zapisany w przeglądarce, ale nie będzie dostępny z poziomu 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 powinien być widoczny element __Host-partitioned-cookie z kluczem partycji witryny najwyższego poziomu https://chips-site-a.glitch.me.

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

Jeśli zaznaczysz opcję Pokaż odfiltrowane żądania plików cookie, w Narzędziach deweloperskich pojawi się informacja, że bezpartycjonowany plik cookie jest zablokowany i podświetlony na żółto z etykietą „Ten plik cookie został zablokowany z powodu preferencji użytkownika”.

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

W sekcji Aplikacja > Miejsce na dane > pliki cookie – kliknięcie https://chips-site-b.glitch.me wyświetli:

  • unpartitioned-cookie z pustym kluczem partycji.
  • Plik cookie __Host-partitioned-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. Widoczny jest element unpartitioned-cookie, ale nie jest dostępny dla elementu iframe witryny B, gdy jest umieszczony w witrynie A.

Usuń pliki cookie

Aby zresetować wersję demonstracyjną, wyczyść wszystkie pliki cookie witryny:

  • Naciśnij Control+Shift+J (lub Command+Option+J na Macu), aby otworzyć Narzędzia deweloperskie.
  • Kliknij kartę Application (Aplikacja).
  • Przejdź do Application > (Aplikacja) > Miejsce na dane > Pliki cookie.
  • Kliknij prawym przyciskiem myszy element https://chips-site-b.glitch.me.
  • Kliknij Wyczyść.

Zasoby