Przepisy na własne pliki cookie

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

Pliki cookie mogą być własne lub innych firm w zależności od kontekstu użytkownika, w zależności od witryny, w której znajduje się w danym momencie. Jeśli domena i schemat pliku cookie, które można zarejestrować, są zgodne z bieżącą stroną najwyższego poziomu (czyli tym, co widać na pasku adresu przeglądarki), uznaje się, że plik cookie pochodzi z tej samej witryny co strona i jest ogólnie nazywany własnym plikiem cookie.

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

Jeśli konfigurowany plik cookie nie jest używany np. do zarządzania sesjami w witrynie i nigdy nie jest używany w elementach iframe z innych witryn, jest on zawsze używany we własnych treściach.

Domyślnie pliki cookie mogą być udostępniane innym witrynom, udostępniane przez JavaScript i wysyłane przez połączenia HTTP, co wiąże się z pewnymi zagrożeniami dla prywatności i bezpieczeństwa. Chociaż stale pracujemy nad poprawą domyślnego działania, za pomocą Piaskownicy prywatności i innych propozycji, takich jak pliki cookie powiązane ze źródłem, możesz już dziś zrobić sporo rzeczy, ustawiając dodatkowe atrybuty plików cookie.

Ta konfiguracja to sprawdzona metoda, która zapewnia bezpieczeństwo i zgodność z większością własnych plików cookie w różnych przeglądarkach. Zapewni Ci to bezpieczne podstawy, które możesz dostosować, aby otwierać uprawnienia tylko wtedy, gdy to konieczne. W tym artykule znajdziesz też opisy różnych przepisów, które mają zastosowanie w określonych sytuacjach.

Przepis

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

Host to opcjonalny prefiks, który sprawia, że niektóre atrybuty są obowiązkowe, a inne są niedozwolone:

  • Pole Secure musi być obecne
  • Parametr Domain musi zostać pominięty
  • Wartość w polu Path musi wynosić /

Po dodaniu atrybutu Host możesz oczekiwać, że przeglądarka sprawdzi, czy te atrybuty są ustawione zgodnie z regułami __Host, i w razie potrzeby odrzuci plik cookie.

Secure chroni pliki cookie przed kradzieżą w niezabezpieczonych sieciach, ponieważ zezwala na wysyłanie plików cookie tylko przez połączenia HTTPS. Jeśli witryna nie została jeszcze przeniesiona do protokołu HTTPS, potraktuj to priorytetowo.

Atrybut Domain określa hosty, które mogą otrzymywać plik cookie. Jego pominięcie ogranicza plik cookie do bieżącego hosta dokumentu z wyłączeniem subdomen: plik cookie dla adresu example.com będzie wysyłany przy każdym żądaniu do example.com, ale nie w przypadku żądań kierowanych do images.example.com. Jeśli masz różne aplikacje działające w różnych subdomenach, zmniejsza to ryzyko, że jedna z przejętych domen umożliwi dostęp do innych domen.

Path wskazuje ścieżkę, która musi istnieć 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 parametrów Domain i Path=/ sprawia, że plik cookie jest możliwie jak najbardziej powiązany ze źródłem, dlatego działa podobnie do innych pamięci po stronie klienta, takich jak LocalStorage – nie ma wątpliwości, że example.com/a może otrzymywać inne wartości niż example.com/b.

Atrybut HttpOnly zwiększa ochronę przed złośliwymi skryptami innych firm w witrynach przez ograniczenie dostępu do JavaScriptu. Pozwala na wysyłanie plików cookie tylko w nagłówkach żądań i blokuje je dla JavaScriptu za pomocą document.cookie.

Max-Age ogranicza czas życia pliku cookie, ponieważ sesje przeglądarki mogą trwać dość długo, a Ty nie chcesz przechwytywać nieaktualnych plików cookie. Jest to dobre rozwiązanie w przypadku krótkoterminowych plików cookie, np. sesji użytkowników, a nawet krótszych, takich jak tokeny do przesyłania formularzy. Parametr Max-Age jest definiowany w sekundach, a w poprzednim przykładzie miał wartość 7776000 sekund, czyli 90 dni. Jest to rozsądna wartość domyślna, którą możesz zmienić w zależności od konkretnego przypadku użycia.

SameSite=Lax ogranicza plik cookie, aby można było go wysyłać tylko w przypadku żądań pochodzących z tej samej witryny. Oznacza to, że żądanie odpowiada aktualnemu kontekstowi przeglądania, czyli witrynie najwyższego poziomu, którą obecnie odwiedza użytkownik, która jest widoczna na pasku lokalizacji. SameSite=Lax jest ustawieniem domyślnym w nowoczesnych przeglądarkach, ale warto określić go, by zapewnić zgodność z przeglądarkami, które mogą mieć inne wartości domyślne. Jeśli wyraźnie oznaczysz plik cookie jako pochodzący tylko z tej samej witryny, ograniczysz go do treści własnych i nie musisz wprowadzać zmian w tym pliku po wycofaniu z niego plików cookie innych firm.

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

Jeśli masz witrynę z subdomenami i chcesz mieć jedną sesję we wszystkich z nich, prefiks Host może być zbyt restrykcyjny. Na przykład news.site może mieć subdomeny tematów takich jak finance.news.site i sport.news.site i chcesz, aby każda sesja użytkownika była dostępna tylko dla jednej sesji. W takim przypadku użyj prefiksu __Secure zamiast __Host i określ 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 reprezentuje mniej wymagań niż Host: wymaga, aby plik cookie był ustawiony za pomocą atrybutu Secure.

Chociaż pliki cookie SameSite=Lax nie są wysyłane w przypadku żądań podrzędnych pochodzących z innych witryn (np. podczas wczytywania umieszczonych obrazów lub elementów iframe w witrynie innej firmy), są wysyłane, gdy użytkownik otwiera witrynę źródłową (np. klikając link z innej witryny).

Możesz jeszcze bardziej ograniczyć dostęp do plików cookie i uniemożliwić wysyłanie ich razem z żądaniami zainicjowanymi z witryn innych firm za pomocą SameSite=Strict. Jest to przydatne, gdy masz pliki cookie związane z funkcjami, od których zawsze będzie można rozpocząć nawigację (np. zmienić hasło lub dokonać zakupu).

Przepis

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