Objaśnienie plików cookie SameSite

Obsługa przeglądarek

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

Źródło

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

Dzięki wprowadzeniu atrybutu SameSite (zdefiniowanym w dokumencie RFC6265bis) możesz zadeklarować, czy plik cookie jest ograniczony do kontekstu własnego czy tej samej witryny. Warto zrozumieć, co dokładnie oznacza słowo „witryna”. Witryna składa się z przyrostka domeny i części domeny tuż przed nim. Na przykład domena www.web.dev jest częścią witryny web.dev.

Termin kluczowy: jeśli użytkownik jest na stronie www.web.dev i prosi o obraz z witryny static.web.dev, to jest to żądanie na tej samej stronie.

Lista domen publicznych określa, które strony są uznawane za znajdujące się w tej samej witrynie. Nie zależy tylko od domen najwyższego poziomu, takich jak .com, ale może obejmować też usługi takie jak github.io. Dzięki temu atrybuty your-project.github.iomy-project.github.io będą zliczane jako osobne witryny.

Termin kluczowy: jeśli użytkownik jest w witrynie your-project.github.io i wysyła żądanie obrazu z witryny my-project.github.io, jest to żądanie międzywitrynowe.

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

Atrybut SameSite w ciasteczkach umożliwia kontrolowanie tego zachowania na 3 sposoby. Możesz nie podawać atrybutu lub użyć wartości Strict lub Lax, aby ograniczyć plik cookie do żądań w ramach tej samej witryny.

Jeśli ustawisz SameSite jako Strict, plik cookie będzie wysyłany tylko we własnym kontekście, czyli tylko wtedy, gdy witryna, do której prowadzi plik cookie, odpowiada witrynie wyświetlanej na pasku adresu przeglądarki. Jeśli plik cookie promo_shown ma takie ustawienia:

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 ramach tego pierwszego żądania. Jest to dobre rozwiązanie w przypadku plików cookie związanych z funkcjami, które zawsze wymagają początkowej nawigacji, np. zmiany hasła lub dokonania zakupu, ale jest zbyt restrykcyjne w przypadku plików cookie takich jak promo_shown. Jeśli czytelnik kliknie link do witryny, będzie chciał wysłać plik cookie, aby można było zastosować jego preferencje.

SameSite=Lax umożliwia przeglądarce wysyłanie plików cookie przy użyciu tych nawigacji najwyższego poziomu. Jeśli na przykład inna witryna odwołuje się do zawartości Twojej witryny, w tym przypadku użyj swojego zdjęcia kota i podaj link do artykułu w następujący 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>

Gdy plik cookie jest ustawiony na Lax:

Set-Cookie: promo_shown=1; SameSite=Lax

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

Zalecamy użycie w tym celu atrybutu SameSite, ustawiając 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ć wartość SameSite na None, aby wskazać, że plik cookie ma być wysyłany we wszystkich kontekstach. Jeśli udostępniasz usługę, z której korzystają inne witryny, np. widżety, treści osadzone, programy partnerskie, reklamy lub logowanie w wielu witrynach, użyj tagu None, aby jasno określić swój cel.

3 pliki cookie o nazwach „Brak”, „Łagodny” lub „Surowy” w zależności od kontekstu
Wyraźnie oznacz kontekst pliku cookie jako None, Lax lub Strict.

Zmiany w domyślnym zachowaniu bez SameSite

Obsługa przeglądarek

  • Chrome: 80.
  • Edge: 86.
  • Firefox: za pomocą flagi.
  • Safari: nieobsługiwane.

Atrybut SameSite jest powszechnie obsługiwany, ale nie został powszechnie przyjęty. W przeszłości ustawienie plików cookie bez parametru SameSite powodowało ich wysyłanie 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ślenia swoich zamiarów i zapewnić użytkownikom większe bezpieczeństwo, w ramach propozycji IETF, czyli wzrostu liczby lepszych plików cookie, wprowadzamy 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ą zgodne ze starszymi wersjami w przeglądarkach, które poprawnie zaimplementowały poprzednią wersję atrybutu SameSite, a także w przeglądarkach, które nie obsługują starszych wersji atrybutu SameSite. Mają one zmniejszyć zależność programistów od domyślnego zachowania przeglądarek przez informowanie o działaniu plików cookie i jego zamierzonym zastosowaniu. Klienci, którzy nie rozpoznają tagu SameSite=None, powinni go zignorować.

SameSite=Lax domyślnie

Jeśli wyślesz plik cookie bez atrybutu SameSite, przeglądarka będzie traktować go tak, jakby miał wartość SameSite=Lax. Nadal zalecamy jawne ustawienie wartości SameSite=Lax, aby zapewnić użytkownikom spójne wrażenia w różnych przeglądarkach.

SameSite=None musi być zabezpieczony

Gdy tworzysz pliki cookie między witrynami za pomocą atrybutu SameSite=None, musisz je też ustawić na Secure, aby przeglądarka je zaakceptowała:

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

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

Zalecamy też jak najszybsze zaktualizowanie istniejących plików cookie do wersji Secure. Jeśli korzystasz w swojej witrynie z usług, które dostarczają treści innych firm, dopilnuj, by dostawca usług zaktualizował ich pliki cookie oraz zaktualizuj wszystkie fragmenty kodu i zależności w witrynie, aby obsługiwały nowe funkcje.

Więcej informacji o aktualizowaniu plików cookie w celu prawidłowego obsługiwania zmian w SameSite=None i różnic w zachowaniu przeglądarki znajdziesz w artykule SameSite cookie recipes (w języku angielskim).

Dziękujemy za opinie i opinie Lily Chen, Malte Ubl, Mike'a Westa, Roba Dodson, Toma Steinera i Viveka Sekhara.

Baner powitalny z ciasteczkiem autorstwa Pille-Riin Priske na Unsplash