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ługiwane domyślnie w Chrome 114 i nowszych wersjach.
- Zakończony proces testowania origin był dostępny w Chrome w wersji od 100 do 116.
- Zapoznaj się z artykułami Zamiar eksperymentu i Zamiar wysyłki.
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.
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.
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.
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.
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.
Projekt techniczny partycjonowania plików cookie
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.
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.
Wymagania wstępne
- Chrome w wersji 118 lub nowszej.
- 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
- Wejdź na https://chips-site-a.glitch.me.
- Naciśnij
Control+Shift+J
(lubCommand+Option+J
na komputerze Mac), aby otworzyć Narzędzia deweloperskie. - Kliknij kartę Application (Aplikacja).
- Kliknij Aplikacja > Pamięć > Pliki cookie.
- Kliknij
https://chips-site-b.glitch.me
.
W Narzędziach deweloperskich wyświetlą się wszystkie pliki cookie z wybranego źródła.
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 poziomuhttps://chips-site-a.glitch.me
.
- Kliknij Otwórz witrynę B.
- W Narzędziach deweloperskich kliknij Aplikacja > Pamięć > Pliki cookie.
- Kliknij
https://chips-site-b.glitch.me
.
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 partycjihttps://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.
- Kliknij Otwórz witrynę A.
- Kliknij kartę Sieć.
- Kliknij
https://chips-site-b.glitch.me
. - 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
.
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”.
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 partycjihttps://chips-site-a.glitch.me
.
Wyczyść pliki cookie
Aby zresetować wersję demonstracyjną, wyczyść wszystkie pliki cookie witryny:
- Naciśnij
Control+Shift+J
(lubCommand+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
- GitHub czytanie wyjaśniającego, zadawanie pytań i obserwowanie dyskusji.
- Pomoc dla deweloperów: zadawaj pytania i dołączaj do dyskusji w repozytorium pomocy dla deweloperów Piaskownicy prywatności.