Objaśnienie plików cookie SameSite

Browser Support

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

Każdy plik cookie zawiera parę klucz-wartość oraz szereg atrybutów, które określają, kiedy i gdzie ten plik cookie jest używany.

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

Kluczowe pojęcie: jeśli użytkownik jest na stronie www.web.dev i prosi o obraz z static.web.dev, jest to żądanie w obrębie tej samej witryny.

Lista domen publicznych określa, które strony są traktowane jako należące do tej samej witryny. Nie zależy to tylko od domen najwyższego poziomu, takich jak .com, ale może też obejmować usługi takie jak github.io. Dzięki temu your-project.github.io i my-project.github.io mogą być traktowane jako osobne witryny.

Kluczowe pojęcie: jeśli użytkownik jest na stronie your-project.github.io i prosi o obraz z my-project.github.io, jest to żądanie pochodzące z innej witryny.

Deklarowanie użycia plików cookie za pomocą atrybutu SameSite

Atrybut SameSite w pliku cookie umożliwia kontrolowanie tego zachowania na 3 sposoby. Możesz nie określać atrybutu lub użyć Strict albo Lax, aby ograniczyć plik cookie do żądań w obrębie tej samej witryny.

Jeśli ustawisz SameSite na Strict, plik cookie może być wysyłany tylko w kontekście własnym, czyli wtedy, gdy witryna pliku cookie jest zgodna z witryną wyświetlaną na pasku adresu przeglądarki. Jeśli więc plik cookie promo_shown jest ustawiony w ten sposób:

Set-Cookie: promo_shown=1; SameSite=Strict

Gdy użytkownik jest w Twojej witrynie, plik cookie jest wysyłany z żądaniem zgodnie z oczekiwaniami. Jeśli jednak użytkownik kliknie link do Twojej witryny z innej witryny, plik cookie nie zostanie wysłany w tym początkowym żądaniu. Jest to dobre rozwiązanie w przypadku plików cookie związanych z funkcjami, które zawsze znajdują się za początkową nawigacją, takimi jak zmiana hasła lub dokonanie zakupu, ale jest zbyt restrykcyjne w przypadku pliku cookie takiego jak promo_shown. Jeśli czytelnik kliknie link do witryny, chce, aby plik cookie został wysłany, aby można było zastosować jego preferencje.

SameSite=Lax umożliwia przeglądarce wysyłanie pliku cookie z tymi nawigacjami najwyższego poziomu. Jeśli na przykład inna witryna odwołuje się do treści Twojej witryny, w tym przypadku używając Twojego zdjęcia kota i podając link do Twojego 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>

W przypadku pliku cookie ustawionego na Lax w ten sposób:

Set-Cookie: promo_shown=1; SameSite=Lax

Gdy przeglądarka poprosi o amazing-cat.png na blogu innej osoby, Twoja witryna nie wyśle pliku cookie. Gdy jednak czytelnik kliknie link do cat.html w Twojej witrynie, to żądanie będzie zawierać plik cookie.

Zalecamy używanie SameSite w ten sposób: ustawiaj pliki cookie, które wpływają na wyświetlanie witryny, na Lax, a pliki cookie związane z działaniami użytkownika na Strict.

Możesz też ustawić SameSite na None, aby wskazać, że chcesz, aby plik cookie był wysyłany we wszystkich kontekstach. Jeśli świadczysz usługę, z której korzystają inne witryny, np. widżety, treści osadzone, programy partnerskie, reklamy lub logowanie w wielu witrynach, użyj None, aby upewnić się, że Twoje intencje są jasne.

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

Zmiany w domyślnym zachowaniu bez atrybutu SameSite

Browser Support

  • Chrome: 80.
  • Edge: 86.
  • Firefox: behind a flag.
  • Safari: not supported.

Atrybut SameSite jest powszechnie obsługiwany, ale nie jest powszechnie stosowany. W przeszłości ustawianie plików cookie bez atrybutu SameSite domyślnie powodowało wysyłanie ich we wszystkich kontekstach, co narażało użytkowników na ataki CSRF i nieumyślne wycieki informacji. Aby zachęcić deweloperów do określania swoich intencji i zapewnienia użytkownikom większego bezpieczeństwa, w propozycji IETF Incrementally Better Cookies przedstawiono 2 kluczowe zmiany:

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

Obie te zmiany są wstecznie zgodne z przeglądarkami, które prawidłowo zaimplementowały poprzednią wersję atrybutu SameSite, a także z przeglądarkami, które nie obsługują wcześniejszych wersji SameSite. Mają one na celu zmniejszenie zależności deweloperów od domyślnego zachowania przeglądarek przez wyraźne określenie zachowania plików cookie i ich zamierzonego użycia. Wszyscy klienci, którzy nie rozpoznają SameSite=None, powinni go ignorować.

Domyślnie SameSite=Lax

Jeśli wyślesz plik cookie bez określenia jego atrybutu SameSite, przeglądarka potraktuje ten plik cookie tak, jakby był ustawiony na SameSite=Lax. Nadal zalecamy wyraźne ustawianie SameSite=Lax, aby zapewnić użytkownikom spójne wrażenia w różnych przeglądarkach.

SameSite=None musi być bezpieczny

Gdy tworzysz pliki cookie pochodzące z innych witryn za pomocą SameSite=None, musisz też ustawić je na Secure, aby przeglądarka je zaakceptowała:

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

To zachowanie możesz przetestować w Chrome 76, włączając about://flags/#cookies-without-same-site-must-be-secure, a w Firefoksie 69 ustawiając network.cookie.sameSite.noneRequiresSecure w about:config.

Zalecamy też jak najszybsze zaktualizowanie dotychczasowych plików cookie do Secure. Jeśli korzystasz z usług, które udostępniają treści osób trzecich w Twojej witrynie, upewnij się, że dostawca usług zaktualizuje swoje pliki cookie, i zaktualizuj wszystkie fragmenty kodu lub zależności w swojej witrynie, aby mieć pewność, że korzysta ona z nowego zachowania.

Więcej informacji o aktualizowaniu plików cookie, aby prawidłowo obsługiwać te zmiany w SameSite=None i różnice w zachowaniu przeglądarek, znajdziesz w artykule Przepisy na pliki cookie z atrybutem SameSite.

Dziękujemy za wkład i opinie Lily Chen, Malte Ubl, Mike'owi Westowi, Robowi Dodsonowi, Tomowi Steinerowi i Vivek Sekharowi.

Baner powitalny z plikami cookie autorstwa Pille-Riin Priske na Unsplash