Zezwalaj programistom na rejestrowanie plików cookie jako „partycjonowane” z osobnym plikiem 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.
Co to są CHIPS?
Pliki cookie o stanie niezależnego partycjonowania (ang. Independent Partyitioned State, CHIPS) umożliwiają programistom dodanie pliku cookie do partycjonowanej pamięci z osobnymi kontenerami plików cookie dla każdej witryny najwyższego poziomu. Pozwala to zwiększyć 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 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.](https://developers.google.cn/static/privacy-sandbox/assets/images/without-cookie-partitioni-bb0cbbf0c63d.png?authuser=6&hl=pl)
CHIPS wprowadza nowy atrybut pliku cookie (Partitioned
), który umożliwia obsługę plików cookie pochodzących z różnych witryn, 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 początkowo ustawiony i nie można uzyskać do niego dostępu z innego miejsca. 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.](https://developers.google.cn/static/privacy-sandbox/assets/images/with-cookie-partitioning-d3df97804f836.png?authuser=6&hl=pl)
W przypadku partycjonowanych plików cookie, gdy użytkownik odwiedza stronę A, a umieszczona treść z witryny C ustawi plik cookie z atrybutem partycjonowanym, plik cookie jest zapisywany w podzielić na partycje słoiku przeznaczonym tylko na pliki cookie, które witryna C ustawia po umieszczeniu 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 odwiedzi witrynę C jako witrynę najwyższego poziomu, to partycjonowany plik cookie ustawiony przez C, gdy był umieszczony w witrynie A, również nie zostanie przesłany w tym żądaniu.
![Diagram pokazujący, że pliki cookie nie są udostępniane, gdy ta sama witryna zewnętrzna jest umieszczona w 2 różnych witrynach.](https://developers.google.cn/static/privacy-sandbox/assets/images/with-cookie-partitioning-a19ff8bdd6d0d.png?authuser=6&hl=pl)
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 niej pole czatu z zespołem pomocy. Obecnie wiele usług czatu z możliwością umieszczania korzysta z plików cookie do zapisywania stanu.
![Diagram przedstawiający stronę internetową z umieszczonym w formie widżetem czatu](https://developers.google.cn/static/privacy-sandbox/assets/images/top-level-site-retailexa-b1bf622bc028e.png?authuser=6&hl=pl)
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 uwierzytelniania.
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ętrznych sieci CDN, które używają plików cookie do wyświetlania treści, do których dostęp jest kontrolowany przez stan uwierzytelniania we własnej witrynie (np. zdjęcia profilowe w witrynach mediów społecznościowych hostowane w zewnętrznych sieciach CDN);
- Platformy frontendowe korzystające ze zdalnych interfejsów API przy użyciu plików cookie do obsługi żądań
- 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. partycjonowanie plików cookie bez zgody innej firmy może jednak prowadzić do nieoczekiwanych błędów, ponieważ niektóre usługi innych firm mają utworzone serwery, które oczekują bezpartycjonowanych plików cookie innych firm.
Safari próbowało już partycjonować pliki cookie na podstawie heurystyki, ale w końcu całkowicie je zablokowało, podając jako jedną z przyczyn dezorientacji programistó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 innych firm mogły być wysyłane w odpowiedzi na żądania z różnych stron, gdy pliki cookie innych firm (bez partycji) staną się nieaktualne, pliki cookie muszą mieć nowy atrybut.
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 pomaga usługom w płynnym przejściu na przyszłość bez plików cookie innych firm.
Projekt techniczny partycjonowania plików cookie
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
.
Kluczem partycji jest w tym przypadku ("https", "retail.example")
.
Podobnie klucz partycji żądania to witryna z adresu 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.](https://developers.google.cn/static/privacy-sandbox/assets/images/site-and-embedded-site-b6ea4419a367f.png?authuser=6&hl=pl)
Przed CHIPS
key=("support.chat.example")
PO CHIPSACH
key={("support.chat.example"),("https", "retail.example")}
Projekty 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 alternatywne rozwiązania dla partycjonowania CHIPS, w którym wymagany jest dostęp do niepartycjonowanych plików cookie z innych witryn.
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 prezentacja pokaże Ci, jak działają partycjonowane pliki cookie i jak możesz je sprawdzić 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 w tej lokalizacji przez document.cookie
.
Gdy pliki cookie innych firm zostaną zablokowane, witryna B będzie mogła utworzyć i uzyskać dostęp do pliku cookie tylko z atrybutem Partitioned
w kontekście innych witryn.
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](https://developers.google.cn/static/privacy-sandbox/assets/images/3p-cookies-blocked-and-not-blocked.png?authuser=6&hl=pl)
Wymagania wstępne
- Chrome w wersji 118 lub nowszej,
- Otwórz stronę
chrome://flags/#test-third-party-cookie-phaseout
i włącz to ustawienie
Badanie partycjonowanych plików cookie za pomocą Narzędzi deweloperskich
- Wejdź na stronę https://chips-site-a.glitch.me.
- Naciśnij
Control+Shift+J
(lubCommand+Option+J
na Macu), aby otworzyć Narzędzia deweloperskie. - Kliknij kartę Application (Aplikacja).
- Przejdź do pozycji Application (Aplikacja) > Miejsce na dane > Pliki cookie.
- Kliknij
https://chips-site-b.glitch.me
.
W Narzędziach deweloperskich wyświetlą się wszystkie pliki cookie z wybranego źródła.
![](https://developers.google.cn/static/privacy-sandbox/assets/images/QcTVEgWjGYQZJtMX0g4a.png?authuser=6&hl=pl)
Witryna B może ustawić partycjonowany plik cookie tylko w kontekście z innej witryny, a niepartycjonowany plik cookie jest blokowany:
- Powinna być widoczna wartość
__Host-partitioned-cookie
z kluczem partycji witryny najwyższego poziomuhttps://chips-site-a.glitch.me
.
![](https://developers.google.cn/static/privacy-sandbox/assets/images/DvSAMie7T41SFBY7wUrc.png?authuser=6&hl=pl)
- Kliknij Otwórz witrynę B.
- W Narzędziach deweloperskich wybierz Aplikacja > Miejsce na dane > Pliki cookie.
- Kliknij
https://chips-site-b.glitch.me
.
![Witryna B](https://developers.google.cn/static/privacy-sandbox/assets/images/site-b.png?authuser=6&hl=pl)
W tej sytuacji, ponieważ jesteś w witrynie B w kontekście najwyższego poziomu, może ona tworzyć i otwierać oba pliki cookie:
unpartitioned-cookie
ma pusty klucz partycji.- Plik cookie
__Host-partitioned-cookie
ma klucz partycjihttps://chips-site-b.glitch.me
.
![](https://developers.google.cn/static/privacy-sandbox/assets/images/vl4ouXXVqQ1bB5dEP4iK.png?authuser=6&hl=pl)
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.
- 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 element __Host-partitioned-cookie
z kluczem partycji witryny najwyższego poziomu https://chips-site-a.glitch.me
.
![](https://developers.google.cn/static/privacy-sandbox/assets/images/223LlvPnqtMPoEjMASht.png?authuser=6&hl=pl)
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”.
![](https://developers.google.cn/static/privacy-sandbox/assets/images/a4jDguCgbwt9D5RB5Q6r.png?authuser=6&hl=pl)
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 partycjihttps://chips-site-a.glitch.me
.
![](https://developers.google.cn/static/privacy-sandbox/assets/images/tv3pAAoTktiX3nZdIUIh.png?authuser=6&hl=pl)
__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
(lubCommand+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
- GitHub przeczytaj objaśnienie, podpowiadaj pytania i śledź dyskusję.
- Pomoc dla deweloperów: zadawaj pytania i dołączaj do dyskusji w repozytorium pomocy dla deweloperów Piaskownicy prywatności.