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.

Wprowadzenie atrybutu SameSite (zdefiniowanego w RFC6265bis) umożliwia określenie, czy plik cookie jest ograniczony do własnych plików cookie lub do kontekstu tej samej witryny. Warto dokładnie zrozumieć, co oznacza tutaj „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.

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 wartość SameSite na Strict, plik cookie może być wysyłany tylko w kontekście własnych plików cookie, czyli wtedy, gdy witryna, do której należy plik cookie, jest zgodna z witryną wyświetlaną 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, chce, aby został wysłany plik cookie, który pozwoli zastosować jego ustawienia.

SameSite=Lax pozwala przeglądarce wysyłać plik cookie w ramach tych nawigacji najwyższego poziomu. Jeśli na przykład inna witryna odwołuje się do treści z Twojej witryny, w tym przypadku używając zdjęcia Twojego 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>

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. Gdy jednak czytelnik kliknie link do cat.html w Twojej witrynie, to żądanie będzie zawierać 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 z nazwami Brak, Łagodne lub Surowe 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 jest szeroko stosowany. 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 deklarowania swoich zamiarów i zapewnić użytkownikom bezpieczniejsze wrażenia, IETF w swojej propozycji Incrementally Better Cookies przedstawił 2 kluczowe zmiany:

  • Pliki cookie bez atrybutu SameSite są traktowane jako SameSite=Lax.
  • Pliki cookie z SameSite=None muszą też zawierać 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. Ich celem jest ograniczenie polegania deweloperów na domyślnym działaniu przeglądarek poprzez jednoznaczne określenie sposobu działania plików cookie i ich zamierzonego zastosowania. 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 w Chrome 76, włączając about://flags/#cookies-without-same-site-must-be-secure, a od Firefoxa 69, ustawiając network.cookie.sameSite.noneRequiresSecureabout:config.

Zalecamy też jak najszybsze zaktualizowanie istniejących plików cookie do wersji Secure. Jeśli korzystasz z usług, które dostarczają treści innych firm w Twojej witrynie, upewnij się, że dostawca usługi zaktualizuje pliki cookie i zaktualizuje wszelkie fragmenty kodu lub zależności w Twojej witrynie, aby używała ona nowego zachowania.

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 wkład i opinie Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner i Vivek Sekhar.

Baner powitalny z ciasteczkiem autorstwa Pille-Riin Priske na Unsplash