Przepisy na własne pliki cookie

Dowiedz się, jak skonfigurować własne pliki cookie, aby zapewnić bezpieczeństwo, zgodność z różnymi przeglądarkami i zminimalizować ryzyko problemów po wycofaniu plików cookie innych firm.

Pliki cookie mogą być własne lub innych firm w zależności od kontekstu użytkownika, czyli od tego, w której witrynie się znajduje. Jeśli domena i schemat pliku cookie mieszczą się w ramach domeny najwyższego poziomu, czyli są zgodne z tym, co wyświetla się na pasku adresu przeglądarki, plik cookie jest uznawany za pochodzący z tej samej witryny co strona i jest zwykle nazywany własnym plikiem cookie.

Pliki cookie z innych domen niż bieżąca witryna są zwykle nazywane plikami cookie innych firm.

.

Jeśli plik cookie, który konfigurujesz, nie jest używany w różnych witrynach, np. służy do zarządzania sesjami w Twojej witrynie i nigdy nie jest używany w ramkach iframe w innych witrynach, jest on zawsze używany w kontekście własnej witryny.

Domyślnie pliki cookie mogą być udostępniane w różnych witrynach, dostępne przez JavaScript i wysyłane przez połączenia HTTP, co wiąże się z pewnymi zagrożeniami dla prywatności i bezpieczeństwa. Cały czas pracujemy nad ulepszaniem domyślnego zachowania, ale dzięki Piaskownicy prywatności i innym propozycjom, takim jak pliki cookie związane z domeną, możesz już teraz robić wiele rzeczy, ustawiając dodatkowe atrybuty plików cookie.

Poniższa konfiguracja jest sprawdzoną metodą, która zapewnia bezpieczeństwo i kompatybilność z różnymi przeglądarkami w przypadku większości plików cookie pochodzących od właściciela. Zapewni to bezpieczną podstawę, którą możesz dostosować, aby przyznać uprawnienia tylko wtedy, gdy jest to konieczne. W tym artykule omawiamy też warianty przepisów w przypadku niektórych konkretnych zastosowań.

Przepis

Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Szczegóły

Host jest opcjonalnym prefiksem, który powoduje, że niektóre atrybuty stają się obowiązkowe, a inne są niedozwolone:

  • Pole Secure jest wymagane
  • Domain musi zostać pominięty
  • Wartość Path musi być równa /

Po dodaniu atrybutu Host przeglądarka może sprawdzić, czy te atrybuty są ustawione zgodnie z regułami __Host, i jeśli nie, odrzucić plik cookie.

Secure chroni pliki cookie przed kradzieżą w niebezpiecznych sieciach, ponieważ zezwala na wysyłanie plików cookie tylko przez połączenia HTTPS. Jeśli nie masz jeszcze przeniesionej witryny do protokołu HTTPS, zrób to jak najszybciej.

Atrybut Domain określa, które hosty mogą otrzymywać pliki cookie. Pominięcie go powoduje ograniczenie pliku cookie do bieżącego hosta dokumentu, z wyłączeniem subdomen: plik cookie example.com zostanie wysłany przy każdym żądaniu do example.com, ale nie przy żądaniach do images.example.com. Jeśli masz różne aplikacje działające w różnych subdomenach, zmniejsza to ryzyko, że jedna zhakowana domena umożliwi dostęp do innych.

Path wskazuje ścieżkę, która musi występować w żądanym adresie URL, aby przeglądarka mogła wysłać nagłówek Cookie. Ustawienie Path=/ oznacza, że plik cookie jest wysyłany do wszystkich ścieżek adresów URL w tej domenie. Połączenie opcji bez DomainPath=/ sprawia, że plik cookie jest jak najbardziej powiązany z pochodzącym z niego źródłem, więc zachowuje się podobnie do innych lokalnych pamięci, takich jak LocalStorage. Nie ma więc ryzyka, że example.com/a otrzyma inne wartości niż example.com/b.

Atrybut HttpOnly zapewnia pewną ochronę przed złośliwymi skryptami innych firm w Twoich witrynach, ponieważ ogranicza dostęp do JavaScriptu. Umożliwia wysyłanie pliku cookie tylko w nagłówkach żądań i czyni je niedostępnymi dla JavaScriptu za pomocą document.cookie.

Max-Age ogranicza czas życia pliku cookie, ponieważ sesje przeglądarki mogą trwać dość długo, a nie chcesz, aby nieaktualne pliki cookie krążyły w nieskończoność. Jest to dobre rozwiązanie w przypadku plików cookie o krótkim czasie ważności, takich jak sesje użytkowników, a także krótszych, np. tokenów do przesyłania formularzy. Wartość Max-Age jest podawana w sekundach. W poprzednim przykładzie wynosi 7776000 sekund, czyli 90 dni. To jest rozsądna wartość domyślna, którą możesz zmienić w zależności od potrzeb.

SameSite=Lax ogranicza plik cookie do wysyłania tylko w przypadku żądań z tej samej witryny. Oznacza to, że żądanie pasuje do bieżącego kontekstu przeglądania, czyli witryny najwyższego poziomu, którą użytkownik obecnie odwiedza i która jest wyświetlana na pasku adresu. SameSite=Lax jest domyślną wartością w nowoczesnych przeglądarkach, ale warto ją określić, aby zapewnić zgodność z różnymi przeglądarkami, które mogą mieć inne wartości domyślne. Jeśli wyraźnie oznaczysz plik cookie jako „tylko w ramach tej samej witryny”, ograniczysz jego działanie do kontekstów własnych. Nie będziesz musiał wprowadzać zmian w tym pliku cookie, gdy pliki cookie innych firm zostaną usunięte.

Więcej informacji o różnych atrybutach plików cookie znajdziesz w dokumentacji Set-Cookie w MDN.

Jeśli masz witrynę z subdomenami i chcesz, aby jedna sesja obejmowała wszystkie z nich, prefiks Host może być zbyt restrykcyjny. Na przykład news.site może mieć subdomeny dla tematów, takich jak finance.news.site i sport.news.site, a Ty chcesz, aby wszystkie były dostępne w ramach jednej sesji użytkownika. W takim przypadku zamiast __Host użyj przedrostka __Secure i podaj wartość Domain.

Przepis

Set-Cookie:
__Secure-cookie-name=cookie-value;
Secure;
Domain=news.site;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Szczegóły

Secure to opcjonalny prefiks, który ma mniej wymagań niż Host: wymaga tylko ustawienia pliku cookie za pomocą atrybutu Secure.

Pliki cookie SameSite=Lax nie są wysyłane w ramach subżądań między witrynami (np. podczas wczytywania osadzonych obrazów lub ramek iframe w witrynie innej firmy), ale są wysyłane, gdy użytkownik przechodzi do witryny źródłowej (np. gdy klika link w innej witrynie).

Możesz dodatkowo ograniczyć dostęp do plików cookie i zablokować ich wysyłanie wraz z żądaniami rozpoczętymi z witryn innych firm za pomocą SameSite=Strict. Jest to przydatne, gdy masz pliki cookie związane z funkcjami, które zawsze będą dostępne po początkowej nawigacji, np. zmiana hasła lub dokonanie zakupu.

Przepis

Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Strict;