Objaśnienie plików cookie SameSite

Obsługa przeglądarek

  • 51
  • 16
  • 60
  • 13

Źródło

Każdy plik cookie zawiera parę klucz-wartość oraz szereg atrybutów, które kontrolują miejsce i czas używania tego pliku.

Wprowadzenie atrybutu SameSite (zdefiniowanego w RFC6265bis) pozwala zadeklarować, czy plik cookie jest ograniczony do kontekstu własnego czy tej samej witryny. Warto dokładnie zrozumieć, co oznacza tu słowo „witryna”. Witryna to połączenie sufiksu domeny i części domeny tuż przed nim. Na przykład domena www.web.dev jest częścią witryny web.dev.

Kluczowe hasło: jeśli użytkownik korzysta z www.web.dev i prosi o zdjęcie z static.web.dev, jest to żądanie dotyczące tej samej witryny.

Lista domen publicznych określa, które strony są uznawane za znajdujące się w tej samej witrynie. Zależy ona nie tylko od domen najwyższego poziomu, takich jak .com, ale może również obejmować usługi takie jak github.io. Dzięki temu your-project.github.io i my-project.github.io będą liczone jako oddzielne witryny.

Kluczowe hasło: jeśli użytkownik korzysta z your-project.github.io i prosi o zdjęcie z my-project.github.io, jest to żądanie z innej witryny.

Aby zadeklarować użycie plików cookie, użyj atrybutu SameSite

Atrybut SameSite w pliku cookie udostępnia 3 różne sposoby kontrolowania tego zachowania. Możesz nie określać atrybutu albo użyć właściwości Strict lub Lax, aby ograniczyć plik cookie do żądań pochodzących z tej samej witryny.

Jeśli ustawisz SameSite na Strict, plik cookie będzie wysyłany tylko w kontekście własnym, czyli gdy witryna powiązana z plikiem cookie jest zgodna z witryną widoczną na pasku adresu przeglądarki. Jeśli więc plik cookie promo_shown jest skonfigurowany w ten sposób:

Set-Cookie: promo_shown=1; SameSite=Strict

Gdy użytkownik odwiedza witrynę, plik cookie jest wysyłany z żądaniem zgodnie z oczekiwaniami. Jeśli jednak użytkownik kliknie link do Twojej witryny z innego źródła, plik cookie nie zostanie wysłany w ramach tego pierwotnego żądania. Jest to przydatne w przypadku plików cookie związanych z funkcjami, od których zawsze można nawigować (np. zmiana hasła czy dokonanie zakupu), ale jest zbyt restrykcyjne dla plików cookie takich jak promo_shown. Jeśli czytelnik kliknie link do witryny, chce wysłać plik cookie, aby zastosować wybrane ustawienia.

SameSite=Lax umożliwia przeglądarce wysyłanie pliku cookie z nawigacją najwyższego poziomu. Jeśli na przykład inna witryna odwołuje się do treści Twojej witryny, w tym przypadku użyj zdjęcia kota i podaj link do artykułu w ten sposób:

<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>

Z plikiem cookie ustawionym na Lax w następujący sposób:

Set-Cookie: promo_shown=1; SameSite=Lax

Gdy przeglądarka wysyła żądanie amazing-cat.png dotyczące bloga innej osoby, witryna nie wysyła pliku cookie. Jeśli jednak czytelnik kliknie w Twojej witrynie link do strony cat.html, żądanie nie obejmie pliku cookie.

Zalecamy korzystanie z SameSite w ten sposób, ustawienie plików cookie, które wpływają na wyświetlanie witryny na Lax, a plików cookie związanych z działaniami użytkownika – na Strict.

Możesz też ustawić SameSite na None, aby wskazać, że plik cookie ma być wysyłany we wszystkich kontekstach. Jeśli oferujesz usługę używaną przez inne witryny, np. widżety, umieszczone treści, programy partnerskie, reklamy lub logowanie się w wielu witrynach, użyj None, aby mieć pewność, że masz jasne intencje.

3 pliki cookie oznaczone etykietami Brak, Lax lub Ścisły, w zależności od kontekstu
Wyraźnie oznacz kontekst pliku cookie jako None, Lax lub Strict.

Zmiany w domyślnym działaniu bez wartości SameSite

Obsługa przeglądarek

  • 80
  • 86
  • x

Atrybut SameSite jest powszechnie obsługiwany, ale nie jest jeszcze powszechnie używany. W przeszłości ustawienie plików cookie bez atrybutu SameSite domyślnie powodowało wysyłanie ich we wszystkich kontekstach, co narażało użytkowników na ryzyko CSRF i niezamierzonego wycieku informacji. Aby zachęcić deweloperów do wyrażenia zamiaru i zapewnienia użytkownikom większego bezpieczeństwa, propozycja IETF Coraz lepsze pliki cookie zawiera 2 kluczowe zmiany:

  • Pliki cookie bez atrybutu SameSite są traktowane jako SameSite=Lax.
  • Pliki cookie z atrybutem SameSite=None muszą też zawierać parametr Secure, co oznacza, że wymagają bezpiecznego kontekstu.

Obie te zmiany są zgodne wstecznie z przeglądarkami, które poprawnie wdrożyły poprzednią wersję atrybutu SameSite, a także z przeglądarkami, które nie obsługują wcześniejszych wersji atrybutu SameSite. Mają one zmniejszyć zależność programistów od domyślnego zachowania przeglądarek, ponieważ określają sposób działania plików cookie i jawnie określają ich przeznaczenie. Klienci, którzy nie rozpoznają SameSite=None, powinni go ignorować.

SameSite=Lax domyślnie

Jeśli wyślesz plik cookie bez określania atrybutu SameSite, przeglądarka potraktuje go tak, jakby miał wartość SameSite=Lax. Nadal zalecamy ustawienie SameSite=Lax, aby zapewnić spójne wrażenia użytkowników w różnych przeglądarkach.

SameSite=None musi być bezpieczny

Gdy tworzysz pliki cookie pochodzące z różnych stron za pomocą SameSite=None, musisz też ustawić ich wartość Secure, aby przeglądarka akceptowała je:

Set-Cookie: widget_session=abc123; SameSite=None; Secure

Możesz przetestować to działanie od Chrome 76, włączając about://flags/#cookies-without-same-site-must-be-secure, a w przeglądarce Firefox w wersji 69, ustawiając opcję network.cookie.sameSite.noneRequiresSecure w about:config.

Zalecamy też jak najszybsze zaktualizowanie istniejących plików cookie do wersji Secure. Jeśli korzystasz z usług, które dostarczają w Twojej witrynie treści osób trzecich, dopilnuj, by dostawca tych usług zaktualizował ich pliki cookie oraz że wszelkie fragmenty i zależności w Twojej witrynie korzystały z nowego sposobu działania.

Więcej informacji o aktualizowaniu plików cookie w celu obsługi tych zmian w SameSite=None oraz o różnicach w działaniu przeglądarki znajdziesz w kolejnym artykule: Przepisy na pliki cookie SameSite.

Dziękujemy za wkład i opinie od Lily Chen, Malte Ubl, Mike'a Westa, Roba Dodsona, Toma Steinera i Viveka Sekhara.

Baner powitalny z plikiem cookie autorstwa: Pille-Riin Priske w serwisie Unsplash