Pliki cookie z niezależnym stanem partycji (CHIPS)

Zezwalaj deweloperom na zapisywanie pliku cookie w pamięci partycjonowanej, z osobnym słoikiem plików cookie dla każdej witryny najwyższego poziomu.

Stan implementacji

Obsługa przeglądarek

  • 114
  • 114
  • x
  • x

Źródło

Czym są CHIPS?

Pliki cookie o niezależnym stanie partycjonowania (CHIPS) pozwalają deweloperom zapisywać pliki cookie w pamięci partycjonowanej. Zawierają one osobne słoiki plików cookie dla każdej witryny najwyższego poziomu, co poprawia prywatność i bezpieczeństwo użytkownika.

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ą obecnie w fazie wycofywania niepartycjonowanych plików cookie innych firm, dlatego w przypadku zablokowania plików cookie innych firm jedynym sposobem odczytywania i zapisywania plików cookie z kontekstów innych witryn, takich jak elementy iframe, będą CHIPS, Storage Access API i zestawy powiązanych witryn.

Schemat pokazujący, jak można udostępniać cookie między 2 różnymi stronami internetowymi.
Bez partycjonowania plików cookie usługa zewnętrzna może ustawić plik cookie umieszczony w jednej witrynie najwyższego poziomu i uzyskiwać dostęp do tego samego pliku cookie, gdy usługa jest umieszczona w innych witrynach najwyższego poziomu.

CHIPS wprowadza nowy atrybut pliku cookie Partitioned, aby obsługiwać pliki cookie pochodzące z różnych stron, które są partycjonowane 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 jest wstępnie ustawiona, i nie można uzyskać do niego dostępu z innej lokalizacji. Dzięki temu pliki cookie ustawiane przez usługę innej firmy mogą być odczytywane tylko w tym samym osadzonym kontekście witryny najwyższego poziomu, w której zostały początkowo skonfigurowane.

Schemat pokazujący, że 2 różne witryny zawierające tę samą firmę zewnętrzną nie będą już udostępniać plików cookie tej firmy.
Dzięki partycjonowaniu plików cookie usługa zewnętrzna, która ustawia plik cookie umieszczony w jednej witrynie najwyższego poziomu, nie ma dostępu do tego samego pliku cookie, gdy usługa jest umieszczona w innych witrynach najwyższego poziomu.

W przypadku partycjonowanych plików cookie, gdy użytkownik odwiedzi witrynę A, a umieszczona w niej treść z witryny C zapisze plik cookie z atrybutem Partycjonowanie, plik cookie zostanie zapisany w przedzielonym pliku jar, przeznaczonym tylko dla plików cookie ustawianych przez witrynę C, gdy jest umieszczona w witrynie A. Przeglądarka wysyła ten plik cookie tylko wtedy, gdy witryna najwyższego poziomu to A.

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

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

Schemat pokazujący, że pliki cookie nie są udostępniane, gdy ta sama firma zewnętrzna jest umieszczona w 2 różnych witrynach.
Dzięki partycjonowaniu plików cookie usługa zewnętrzna, która ustawia plik cookie po umieszczeniu w witrynie, nie ma dostępu do tego samego pliku cookie nawet wtedy, gdy użytkownik korzysta z niej jako witryna najwyższego poziomu.

Przykłady zastosowań

Na przykład witryna retail.example może współpracować z usługą innej firmy support.chat.example, aby umieścić w niej okno czatu z zespołem pomocy. Obecnie wiele usług czatu z możliwością umieszczenia na stronie korzysta z plików cookie w celu zapisywania stanu.

Schemat przedstawiający stronę internetową z widocznym widżetem czatu
Witryna najwyższego poziomu „handel detaliczny”.example, w którym umieszczono usługę innej firmy support.chat.example.

Bez możliwości skonfigurowania pliku cookie pochodzącego z innych witryn support.chat.example musiałby znaleźć alternatywne, często bardziej złożone metody przechowywania stanu. Można go też umieścić na stronie najwyższego poziomu, co stwarza ryzyko, bo dzięki temu skrypt support.chat.example ma podwyższone uprawnienia w handlu detalicznym.example, np. dostęp do plików cookie uwierzytelniania.

Elementy typu CHIPS ułatwiają dalsze korzystanie z plików cookie pochodzących z różnych stron bez ryzyka związanego z utworzeniem niepartycjonowanych plików cookie.

Przykładowe przypadki użycia CHIPS obejmują wszystkie scenariusze, w których zasoby podrzędne z wielu witryn wymagają określenia sesji lub stanu trwałego obejmującego aktywność użytkownika w pojedynczej witrynie najwyższego poziomu, np.:

  • Umieszczone czaty innych firm
  • Umieszczanie map innych firm
  • Umieszczanie w witrynie płatności innych firm
  • Równoważenie obciążenia CDN zasobu podrzędnego
  • Dostawcy systemów CMS bez interfejsu graficznego
  • domeny piaskownicy do wyświetlania treści niezaufanych użytkowników (np. googleusercontent.com i githubusercontent.com),
  • Zewnętrzne sieci CDN używające plików cookie do wyświetlania treści kontrolowanych przez stan uwierzytelniania we własnych witrynach (np. zdjęcia profilowe w mediach społecznościowych hostowanych w zewnętrznych sieciach CDN)
  • Platformy frontendu korzystające ze zdalnych interfejsów API używających plików cookie do obsługi żądań
  • Umieszczone reklamy, które muszą być ograniczone do stanu według wydawcy (np. rejestrować preferencje użytkowników dotyczące reklam w danej witrynie).

Dlaczego CHIPS używa modelu partycjonowania wymagającego zgody

Ponieważ przeglądarki wycofują niepartycjonowane pliki cookie innych firm, próbowaliśmy zastosować kilka innych metod partycjonowania.

W przeglądarce Firefox ogłoszono, że domyślnie partycjonuje wszystkie pliki cookie innych firm w ścisłym trybie ETP i trybie przeglądania prywatnego. Dlatego wszystkie pliki cookie pochodzące z innych witryn są partycjonowane przez stronę najwyższego poziomu. Partycjonowanie plików cookie bez udziału innych firm może jednak prowadzić do nieoczekiwanych błędów, ponieważ niektóre usługi innych firm mają wbudowane serwery, które oczekują bez partycjonowania plików cookie innych firm.

Przeglądarka Safari próbowała wcześniej partycjonować pliki cookie na podstawie danych heurystycznych, ale w końcu całkowicie je zablokowała. Jednym z powodów była dezorientacja programistów. Niedawno Safari wyraziły zainteresowanie modelem opartym na subskrypcji.

Tym, co odróżnia CHIPS od istniejących implementacji partycjonowanych plików cookie, jest akceptacja zewnętrznych usług. Aby pliki cookie innych firm mogły być wysyłane w odpowiedzi na żądania pochodzące od innych firm po ich wycofaniu (bez partycjonowania), muszą być skonfigurowane z nowym atrybutem.

Choć pliki cookie innych firm nadal istnieją, atrybut Partitioned umożliwia wyrażenie zgody na bardziej restrykcyjny i bezpieczniejszy typ działania plików cookie. CHIPS to ważny krok, który ma pomóc usługom w płynnym przejściu na przyszłość bez plików cookie innych firm.

Obecnie plik cookie zależy od nazwy hosta lub domeny witryny, która je utworzyła, czyli klucza 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 z włączonym partycjonowaniem będą miały podwójny klucz hosta i klucz partycji.

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

We wcześniejszym przykładzie, gdzie w witrynie https://retail.example umieszczono tag https://support.chat.example, URL najwyższego poziomu to https://retail.example.

Klucz partycji w tym przypadku to ("https", "retail.example").

Analogicznie klucz partycji żądania to witryna z adresem URL najwyższego poziomu, który 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 poprzednim przykładzie przed elementem CHIPS i po nim.

Witryna A i umieszczona witryna C współdzielą partycjonowany plik cookie. Jeśli nie jest on umieszczony, witryna C nie ma dostępu do partycjonowanego pliku cookie.
Witryna A i umieszczona witryna C współdzielą partycjonowany plik cookie. Jeśli nie jest on umieszczony, witryna C nie ma dostępu do partycjonowanego pliku cookie.

Przed CHIPSMI

key=("support.chat.example")

Po CHIPS

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

Projektowanie zabezpieczeń

Aby zachęcić do stosowania dobrych praktyk w zakresie bezpieczeństwa, dzięki CHIPS pliki cookie są zapisywane i wysyłane tylko przez bezpieczne protokoły.

  • Partycjonowane pliki cookie muszą być skonfigurowane za pomocą ustawienia Secure.
  • Podczas konfigurowania partycjonowanych plików cookie zalecamy użycie prefiksu __Host, aby były one powiązane 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 elementów 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 z innych witryn w określonych celach związanych z obsługą użytkowników.

Są to alternatywy dla partycjonowania CHIPS, gdzie wymagany jest dostęp do niepartycjonowanych plików cooke z innych witryn.

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

CHIPS umożliwia działanie usługi jako izolowanego komponentu w wielu witrynach, przy czym ten sam plik cookie nie musi być dostępny w wielu witrynach. Jeśli usługa utworzy partycjonowany plik cookie, jej kluczem partycji będzie witryna najwyższego poziomu, a plik cookie nie będzie dostępny dla innych witryn, które korzystają 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 w Twoim przypadku używana jest partycja pliku cookie współdzielonego między witrynami w RWS, możesz podać przykłady i opinie na temat problemu z GitHub.

Pokaz

Dzięki tej prezentacji dowiesz się, jak działają partycjonowane pliki cookie i jak możesz je sprawdzić w Narzędziach deweloperskich.

Witryna A zawiera element iframe z witryny B, który używa JavaScriptu do ustawiania 2 plików cookie: podzielonych i bez partycjonowanych. Witryna B wyświetla wszystkie pliki cookie dostępne z tej lokalizacji za pomocą document.cookie.

Po zablokowaniu plików cookie innych firm witryna B będzie mogła tworzyć pliki cookie i uzyskiwać do nich dostęp tylko za pomocą atrybutu Partitioned w kontekście innych witryn.

Gdy dozwolone są pliki cookie innych firm, witryna B może też tworzyć niepartycjonowane pliki cookie i mieć do nich dostęp.

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

Wymagania wstępne

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

Użyj Narzędzi deweloperskich, aby sprawdzić partycjonowane pliki cookie

  1. Wejdź na https://chips-site-a.glitch.me.
  2. Naciśnij Control+Shift+J (lub Command+Option+J na komputerze Mac), 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 aplikacji Narzędzia deweloperskie.

Witryna B może umieszczać partycjonowany plik cookie tylko w kontekście innych witryn. Niepartycjonowany plik cookie zostanie zablokowany:

  • Powinien się wyświetlać __Host-partitioned-cookie z kluczem partycji z witryny najwyższego poziomu https://chips-site-a.glitch.me.
Klucz partycji dla pliku __Host-partitioned-cookie.
  1. Kliknij Otwórz witrynę B.
  2. W Narzędziach deweloperskich kliknij Aplikacja > Pamięć > Pliki cookie.
  3. Kliknij https://chips-site-b.glitch.me.
Witryna B
Na najwyższym poziomie strona B widzi wszystkie pliki cookie – partycjonowane i nie partycjonowane

W tym scenariuszu, ponieważ jesteś w witrynie B w kontekście najwyższego poziomu, może ona ustawiać 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 znajduje się w witrynie 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 będzie teraz przechowywany w przeglądarce, ale nie będzie dostępny 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 powinien być widoczny __Host-partitioned-cookie z kluczem partycji z 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 po umieszczeniu w witrynie A.

Jeśli zaznaczysz pokaż odfiltrowane żądania plików cookie, w Narzędziach deweloperskich pojawi się informacja o zablokowaniu pliku cookie bez partycji, wyróżniona na żółto i etykietą: „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.
  • Plik cookie __Host-partitioned-cookie z kluczem partycji https://chips-site-a.glitch.me.
Pliki cookie z witryny B na karcie aplikacji Narzędzia deweloperskie. Plik cookie __Host-partitioned-cookie ma klucz partycji https://chips-site-a.glitch.me. Element unpartitioned-cookie jest widoczny, ale nie jest dostępny dla elementu iframe witryny B, gdy jest umieszczony w witrynie A.

Wyczyść pliki cookie

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

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

Zasoby