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.io
i my-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 sterowanie tym działaniem 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.
Zmiany w domyślnym zachowaniu bez SameSite
Obsługa przeglądarek
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 jakoSameSite=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.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ą treści innych firm w Twojej witrynie, upewnij się, że dostawca usługi zaktualizuje pliki cookie. Zaktualizuj też fragmenty kodu i zależności w witrynie, aby używała ona nowego zachowania.
SameSite
przepisów na ciasteczka
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