Pliki cookie z niezależnym stanem partycji (CHIPS)

umożliwiać deweloperom włączanie plików cookie do „partycjonowanego” miejsca na dane z osobnym kontenerem plików cookie dla każdej witryny najwyższego poziomu;

Stan wdrożenia

Browser Support

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

Source

Czym jest CHIPS?

CHIPS (Cookies Having Independent Partitioned State) umożliwia deweloperom włączenie partycjonowanego przechowywania plików cookie z osobnymi zasobnikami plików cookie dla każdej witryny najwyższego poziomu, co zwiększa prywatność i bezpieczeństwo użytkowników.

Bez podziału 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, interfejs CHIPS, Storage Access APIzestawy powiązanych witryn to jedyne sposoby odczytywania i zapisywania plików cookie w kontekstach obejmujących wiele witryn, np. w elementach iframe.

Diagram pokazujący, jak pliki cookie mogą być udostępniane między dwiema różnymi witrynami.
Bez podziału plików cookie usługa innej firmy może ustawić plik cookie, gdy jest umieszczona w jednej witrynie najwyższego poziomu, i uzyskać dostęp do tego samego pliku cookie, gdy jest umieszczona w innych witrynach najwyższego poziomu.

Technologia CHIPS wprowadza nowy atrybut pliku cookie, Partitioned, który obsługuje pliki cookie z innych witryn podzielone 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. W ten sposób pliki cookie ustawione przez usługę zewnętrzną mogą być odczytywane tylko w tym samym kontekście osadzonym w witrynie najwyższego poziomu, w której zostały pierwotnie ustawione.

Diagram pokazujący, że 2 różne witryny, które umieszczają wspólny element innej firmy, nie będą już udostępniać plików cookie tej firmy.
Dzięki partycjonowaniu 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 umieszczona w innych witrynach najwyższego poziomu.

W przypadku plików cookie z podziałem, gdy użytkownik odwiedza witrynę A, a wbudowane treści z witryny C ustawiają plik cookie z atrybutem Partitioned, plik cookie jest zapisywany w podzielonym kontenerze przeznaczonym tylko dla plików cookie, które witryna C ustawia, gdy jest wbudowana w witrynę A. Przeglądarka wyśle ten plik cookie tylko wtedy, gdy witryna najwyższego poziomu to A.

Gdy użytkownik odwiedzi nową witrynę, np. witrynę B, wbudowana ramka C nie otrzyma pliku cookie, który został ustawiony, gdy ramka C była wbudowana w witrynie A.

Jeśli użytkownik odwiedzi witrynę C jako witrynę najwyższego poziomu, podzielony plik cookie ustawiony przez witrynę C, gdy była ona osadzona w witrynie A, również nie zostanie wysłany w tym żądaniu.

Diagram pokazujący, że pliki cookie nie są udostępniane, gdy ta sama firma zewnętrzna jest umieszczona w dwóch różnych witrynach.
Dzięki partycjonowaniu plików cookie usługa zewnętrzna, która ustawia plik cookie po osadzeniu w witrynie, nie może uzyskać dostępu do tego samego pliku cookie, nawet gdy użytkownik odwiedza tę usługę jako witrynę najwyższego poziomu.

Przypadki użycia

Na przykład witryna retail.example może chcieć współpracować z usługą innej firmy support.chat.example, aby umieścić w swojej witrynie okno czatu z obsługą klienta. Wiele usług czatu do umieszczenia na stronie korzysta obecnie z plików cookie do zapisywania stanu.

Diagram przedstawiający witrynę z osadzonym widżetem czatu
Witryna najwyższego poziomu retail.example, która zawiera usługę zewnętrzną support.chat.example.

Bez możliwości ustawienia pliku cookie w wielu witrynach support.chat.example musiałby znaleźć alternatywne, często bardziej złożone metody przechowywania stanu. Można też umieścić go na stronie najwyższego poziomu, co wiąże się z ryzykiem, ponieważ skrypt support.chat.example będzie miał podwyższone uprawnienia w domenie retail.example, np. możliwość dostępu do plików cookie uwierzytelniania.

CHIPS to łatwiejsza opcja dalszego korzystania z plików cookie z innych witryn bez ryzyka związanego z niepodzielonymi plikami cookie.

Przykłady zastosowań CHIPS obejmują wszystkie scenariusze, w których zasoby podrzędne z różnych witryn wymagają pewnej koncepcji sesji lub trwałego stanu ograniczonego do aktywności użytkownika w jednej witrynie najwyższego poziomu, np.:

  • Umieszczanie czatów innych firm
  • Umieszczanie map innych firm
  • Umieszczone płatności realizowane przez firmy zewnętrzne
  • Równoważenie obciążenia CDN zasobów podrzędnych
  • Dostawcy CMS bez interfejsu graficznego
  • domeny piaskownicy do wyświetlania niezaufanych treści użytkowników (np. googleusercontent.com i githubusercontent.com);
  • Sieci CDN innych firm, które używają plików cookie do wyświetlania treści, do których dostęp jest kontrolowany przez stan uwierzytelnienia w witrynie własnej (np. zdjęcia profilowe w mediach społecznościowych hostowanych w sieciach CDN innych firm).
  • Frameworki front-end, które korzystają z interfejsów API używających w żądaniach plików cookie
  • reklamy zagnieżdżone, które wymagają zakresu stanu dla każdego wydawcy (np. rejestrowanie preferencji użytkowników dotyczących reklam w danej witrynie);

Dlaczego CHIPS korzysta z modelu partycjonowania opartego na zgodzie użytkownika

W przypadku zablokowania dostępu do niepodzielonych plików cookie innych firm podjęto kilka innych prób podziału.

Firefox ogłosił, że w trybie ścisłym ETP i w trybie przeglądania prywatnego domyślnie dzieli wszystkie pliki cookie innych firm, więc wszystkie pliki cookie międzywitrynowe są dzielone według witryny najwyższego poziomu. Jednak dzielenie plików cookie bez zgody użytkownika na korzystanie z usług innych firm może prowadzić do nieoczekiwanych błędów, ponieważ niektóre usługi innych firm mają serwery, które oczekują niepodzielonego pliku cookie innej firmy.

Safari próbowało wcześniej dzielić pliki cookie na podstawie heurystyki, ale ostatecznie zdecydowało się je całkowicie blokować, podając jako jeden z powodów dezorientację deweloperów. Niedawno Safari wyraziło zainteresowanie modelem opartym na zgodzie użytkowników.

To, co odróżnia CHIPS od dotychczasowych implementacji partycjonowanych plików cookie, to zgoda użytkownika na używanie plików cookie innych firm. Aby po wycofaniu (niepodzielonych) plików cookie innych firm można było wysyłać pliki cookie w żądaniach między podmiotami, muszą one mieć nowy atrybut.

Chociaż pliki cookie innych firm nadal istnieją, atrybut Partitioned umożliwia włączenie bardziej restrykcyjnego i bezpieczniejszego typu działania plików cookie. CHIPS to ważny krok, który pomoże usługom płynnie przejść na rozwiązania bez plików cookie innych firm.

Obecnie pliki cookie są powiązane z nazwą hosta lub domeną witryny, która je utworzyła, czyli z kluczem hosta.

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

W przypadku CHIPS pliki cookie, które włączają partycjonowanie, będą miały podwójny klucz: klucz hosta i klucz partycji.

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

W przykładzie powyżej, w którym element https://support.chat.example jest wbudowany w stronę https://retail.example, adresem URL najwyższego poziomu jest https://retail.example.

Kluczem partycji w tym przypadku jest ("https", "retail.example").

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

Oto jak wygląda klucz pliku cookie w przykładzie powyżej przed CHIPS i po CHIPS.

Witryna A i umieszczona w niej witryna C mają wspólny oddzielony plik cookie. Gdy witryna C nie jest umieszczona w innej witrynie, nie może uzyskać dostępu do podzielonego pliku cookie.
Witryna A i umieszczona w niej witryna C współdzielą oddzielony plik cookie. Jeśli witryna C nie jest umieszczona w innej witrynie, nie może uzyskać 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ęcać do stosowania dobrych praktyk w zakresie bezpieczeństwa, w przypadku CHIPS pliki cookie są ustawiane i wysyłane tylko za pomocą bezpiecznych protokołów.

  • Oddzielone pliki cookie muszą być ustawione z wartością Secure.
  • Podczas ustawiania plików cookie z podziałem zalecamy używanie prefiksu __Host-, aby powiązać je z nazwą hosta (a nie z domeną podlegającą rejestracji).

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 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 alternatywy dla partycjonowania CHIPS, w przypadku których wymagany jest dostęp do niepartycjonowanych plików cookie w różnych witrynach.

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

CHIPS umożliwia usłudze działanie jako odizolowany komponent w wielu witrynach, w których ten sam plik cookie nie musi być dostępny. Jeśli usługa ustawi plik cookie z podziałem, jego kluczem podziału będzie witryna najwyższego poziomu, a ten plik cookie nie będzie dostępny dla innych witryn korzystających z tej usługi.

Projekt zestawów powiązanych witryn opiera się na interfejsie Storage Access API i nie jest zintegrowany z partycjonowaniem CHIPS. Jeśli masz przypadek użycia, który opiera się na współdzielonym podziale plików cookie w różnych witrynach w ramach RWS, możesz przesłać przykłady i opinie w zgłoszeniu na GitHubie.

Prezentacja

Ta prezentacja pokaże Ci, jak działają podzielone pliki cookie i jak możesz je sprawdzić w Narzędziach deweloperskich.

Witryna A umieszcza element iframe z witryny B, który za pomocą JavaScriptu ustawia 2 pliki cookie: z partycją i bez partycji. Witryna B wyświetla wszystkie pliki cookie dostępne w tej lokalizacji za pomocą symbolu document.cookie.

Gdy pliki cookie innych firm są blokowane, witryna B może ustawiać pliki cookie z atrybutem Partitioned i uzyskiwać do nich dostęp w kontekście międzywitrynowym.

Gdy pliki cookie innych firm są dozwolone, witryna B może też ustawiać i uzyskiwać dostęp do niepodzielonego pliku cookie.

Witryna A i witryna B
Po lewej: pliki cookie innych firm są blokowane. Po prawej: pliki cookie innych firm są dozwolone.

Wymagania wstępne

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

Sprawdzanie plików cookie z podziałem na partycje 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 deweloperskie wyświetlą 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ć podzielony plik cookie tylko w kontekście wielu witryn, a niepodzielony plik cookie zostanie zablokowany:

  • Powinien się wyświetlić klucz partycji __Host-partitioned-cookie z kluczem partycji witryny najwyższego poziomu https://chips-site-a.glitch.me.
Klucz partycji dla pliku cookie __Host-partitioned-cookie.
  1. Kliknij Go to Site B (Otwórz witrynę B).
  2. W Narzędziach deweloperskich otwórz Aplikacja > Pamięć > Pliki cookie.
  3. Kliknij https://chips-site-b.glitch.me.
Lokalizacja B
Na najwyższym poziomie witryna B może wyświetlać wszystkie pliki cookie – oddzielone i nieoddzielone

W tym scenariuszu, ponieważ znajdujesz się w witrynie B w kontekście najwyższego poziomu, możesz ustawiać oba pliki cookie i uzyskiwać do nich dostęp:

  • unpartitioned-cookie ma pusty klucz partycji.
  • __Host-partitioned-cookie plik cookie ma klucz podziału 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. __Host-partitioned-cookie ma klucz partycji https://chips-site-b.glitch.me.

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

  1. Kliknij Go to Site A (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 symbol __Host-partitioned-cookie z kluczem partycji witryny najwyższego poziomu https://chips-site-a.glitch.me.

Karta Sieć pokazują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 pliki cookie żądania, Narzędzia deweloperskie pokażą, że niepodzielony plik cookie jest zablokowany. Będzie on wyróżniony na żółto i będzie zawierać etykietkę: „Ten plik cookie został zablokowany ze względu na preferencje użytkownika”.

Karta Sieć pokazująca zablokowane pliki cookie z elementu iframe witryny B.

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

  • unpartitioned-cookie z pustym kluczem partycji.
  • __Host-partitioned-cookie plik cookie z kluczem partycjihttps://chips-site-a.glitch.me.
Pliki cookie z witryny B na karcie Aplikacja w Narzędziach deweloperskich. __Host-partitioned-cookie plik cookie ma klucz podziału https://chips-site-a.glitch.me. unpartitioned-cookie jest wyświetlana, ale nie jest dostępna dla elementu iframe witryny B, gdy jest osadzony w witrynie A.

Usuń pliki cookie

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

  • 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 prawym przyciskiem myszy https://chips-site-b.glitch.me.
  • Kliknij Wyczyść.

Zasoby