Web

Ciasteczka HTTP

Zarządzanie sesjami i śledzenie użytkowników za pomocą ciasteczek HTTP i bezpieczeństwo.

Stan HTTP i ciasteczka

Protokół transferu hipertekstu (HTTP) jest bezstanowym protokołem na poziomie aplikacji. traktuje każde żądanie jako osobną wymianę. Serwer może przechowywać dane aplikacji, lecz HTTP nie wymaga przenoszenia tego stanu z jednego żądania do kolejnego.

Bezstanowa obsługa żądań upraszcza równoważenie obciążenia, ponieważ kolejne żądanie nie musi trafić do tego samego procesu serwera. Aplikacja nadal potrzebuje sposobu powiązania żądania z koszykiem, logowaniem lub preferencją. Sklep może użyć identyfikatora sesji dla koszyka, a serwis społecznościowy dla sesji logowania.

przenosi taki identyfikator między żądaniami. Serwer może użyć identyfikatora do pobrania danych sesji, a samo ciasteczko pozostaje ograniczoną nazwą i wartością obsługiwaną przez przeglądarkę.

Wymiana ciasteczek w HTTP

Obsługa stanu ciasteczka korzysta z pola odpowiedzi Set-Cookie oraz pola żądania Cookie. Przeglądarka sprawdza, czy zapisane ciasteczko pasuje do hosta, ścieżki, trybu bezpieczeństwa i własnego czasu życia.

  1. Krok 1: Serwer ustawia ciasteczko

    Po otrzymaniu żądania HTTP serwer może wysłać w odpowiedzi identyfikator sesji. Pole Set-Cookie określa nazwę, wartość i opcjonalne atrybuty ciasteczka.

    Pola odpowiedzi serwera
    HTTP/1.1 200 OK
    Content-Type: text/html
    Set-Cookie: sessionid=abf892kds9; Expires=Wed, 21 Oct 2026 07:28:00 GMT
  2. Krok 2: Przeglądarka przechowuje ciasteczko

    Przeglądarka przetwarza pole Set-Cookie i przechowuje nazwę oraz wartość wraz z domeną, ścieżką, czasem życia i atrybutami bezpieczeństwa. W przykładzie sessionid=abf892kds9 jest powiązane z example.com.

  3. Krok 3: Przeglądarka wysyła pasujące ciasteczko

    Przy kolejnym żądaniu, które pasuje do zakresu i reguł bezpieczeństwa ciasteczka, przeglądarka umieszcza nazwę i wartość w polu Cookie. Ciasteczko nie jest wysyłane do każdego hosta przy każdym żądaniu.

    Pola żądania klienta
    GET /produkty/123 HTTP/1.1
    Host: www.example.com
    Cookie: sessionid=abf892kds9
  4. Krok 4: Serwer odczytuje sesję

    Serwer odczytuje pole Cookie i używa identyfikatora jako klucza do danych sesji, takich jak stan logowania lub zawartość koszyka. Aplikacja generuje następnie odpowiedź dla tej sesji.

Przeglądarka używa atrybutów ciasteczka przy decyzji o dopasowaniu. Pole żądania Cookie zawiera zwykle nazwy i wartości, dlatego serwer nie odczyta z niego samodzielnie czasu wygaśnięcia, ścieżki ani atrybutów Secure i HttpOnly. Aplikacja powinna traktować wartość jako dane wejściowe i sprawdzać powiązaną sesję po stronie serwera.

Zakres i przeznaczenie ciasteczek

Zachowanie ciasteczka opisuje się zwykle przez czas życia i zakres. Serwer przekazuje atrybuty, a przeglądarka stosuje je podczas zapisu i wysyłania ciasteczka.

Czas życia

Ciasteczka sesyjne
Te ciasteczka nie mają atrybutu Expires ani Max-Age. Przeglądarka przechowuje je do końca swojej sesji, przy czym znaczenie sesji ustala sama przeglądarka. Przywracanie sesji przez przeglądarkę może zmienić moment usunięcia takiego ciasteczka. Ciasteczko sesyjne może utrzymywać logowanie lub koszyk podczas wizyty.
Ciasteczka trwałe
Te ciasteczka mają czas życia ustawiony za pomocą Expires lub Max-Age. Przeglądarka przechowuje je do upływu tego czasu, usunięcia przez użytkownika, zastąpienia innym ciasteczkiem albo usunięcia przez własny mechanizm zarządzania pamięcią. Mogą zachowywać język, motyw lub preferencję logowania między wizytami.

Zakres witryny

Ciasteczka pierwszej strony (first-party)
Ciasteczko pierwszej strony działa w kontekście witryny, którą użytkownik odwiedza. Na przykład ciasteczko sesyjne ustawione przez example.com podczas odwiedzania tej witryny należy do jej kontekstu pierwszej strony. Jego przeznaczenie zależy od aplikacji, na przykład może dotyczyć logowania albo preferencji.
Ciasteczka trzeciej strony (third-party)
Ciasteczko trzeciej strony działa w kontekście, w którym witryna powiązana z ciasteczkiem różni się od witryny najwyższego poziomu. Usługa osadzona na example.com, na przykład przycisk społecznościowy „Lubię to” albo komponent reklamowy, może żądać takiego ciasteczka dla własnej domeny. Ustawienia użytkownika, polityka przedsiębiorstwa i ograniczenia przeglądarki mogą blokować te ciasteczka, dlatego aplikacja powinna obsłużyć ich brak.

Atrybuty ciasteczek i zakres żądań

Pole odpowiedzi Set-Cookie może zawierać atrybuty ograniczające czas życia, zakres hosta, zakres ścieżki, transport i widoczność dla skryptów.

Set-Cookie: nazwa=wartosc; Expires=data; Path=/; Domain=.example.com; Secure; HttpOnly; SameSite=Strict
Expires i Max-Age
Expires określa bezwzględną datę i godzinę wygaśnięcia. Max-Age określa czas życia w sekundach od odebrania pola. Gdy oba atrybuty występują razem, pierwszeństwo ma Max-Age. Względny czas życia ogranicza zależność od zegara klienta używanego do interpretacji daty bezwzględnej.
Domain
Ten atrybut określa hosty, które mogą otrzymywać ciasteczko. Po pominięciu atrybutu ciasteczko jest związane tylko z hostem źródłowym. Przy Domain=.example.com początkowa kropka jest ignorowana, a ciasteczko może pasować do example.com i jego subdomen, takich jak api.example.com oraz blog.example.com, zgodnie z regułami przeglądarki.
Path
Ten atrybut ogranicza ścieżki żądań, dla których przeglądarka wysyła pole Cookie. Przy Path=/admin pasuje żądanie do /admin/dashboard, a żądanie do /home nie pasuje. Zakres ścieżki nie tworzy granicy dostępu dla aktywnego skryptu z tego samego źródła.
Secure
Gdy ten atrybut występuje, przeglądarka wysyła ciasteczko tylko przez bezpieczny kanał, zwykle HTTPS z TLS. Chroni on poufność podczas przesyłania, lecz nie chroni integralności ciasteczka przed każdym aktywnym atakiem sieciowym. Identyfikatory sesji powinny używać atrybutu Secure.
HttpOnly
Gdy ciasteczko ma atrybut HttpOnly, interfejsy skryptowe przeglądarki go nie udostępniają. Ogranicza to kradzież ciasteczka w części ataków , lecz wstrzyknięty skrypt nadal może wysyłać żądania jako użytkownik. Ciasteczko sesyjne powinno łączyć ten atrybut z innymi zabezpieczeniami.
SameSite
Ten atrybut ogranicza wysyłanie ciasteczka z żądaniami międzystronowymi i może zmniejszyć część ataków . Ma trzy wartości:
  • Strict: Ciasteczko jest pomijane przy żądaniach międzystronowych, także przy nawigacji najwyższego poziomu z innej witryny.
  • Lax: Ciasteczko jest wysyłane przy żądaniach w tej samej witrynie oraz przy wybranych nawigacjach międzystronowych najwyższego poziomu z bezpiecznymi metodami. Przeglądarka może stosować reguły równoważne Lax po pominięciu atrybutu.
  • None: Ciasteczko może być wysyłane w kontekście międzystronowym. Ta wartość wymaga atrybutu Secure i służy przepływom osadzonym albo federacyjnym, które potrzebują dostępu międzystronowego.

Ciasteczko może przechowywać identyfikator sesji albo dane aplikacji, lecz mechanizm ciasteczek nie określa znaczenia tej wartości. Wrażliwy stan warto przechowywać na serwerze albo zabezpieczyć dane po stronie klienta odpowiednią ochroną integralności i poufności. Atrybuty zakresu ograniczają ekspozycję przy zwykłych żądaniach, a kontrola uprawnień pozostaje zadaniem aplikacji.

Prywatność i polityki przeglądarek dotyczące ciasteczek

Ciasteczka mogą identyfikować przeglądarkę między żądaniami, a ciasteczko używane w wielu kontekstach witryn może ułatwiać śledzenie międzystronowe. Ciasteczka śledzące stron trzecich budzą więc obawy o prywatność, szczególnie gdy usługi reklamowe lub analityczne łączą identyfikatory z wielu witryn.

Obowiązki dotyczące zgody i informacji zależą od jurysdykcji oraz przeznaczenia ciasteczka. Producenci przeglądarek ograniczają także dostęp międzystronowy przez ustawienia, partycjonowanie pamięci, ochronę przed śledzeniem i inne polityki:

  • Polityki ciasteczek stron trzecich: Safari domyślnie blokuje ciasteczka stron trzecich. Firefox domyślnie blokuje ciasteczka śledzące międzystronowo i może izolować inne ciasteczka międzystronowe. Chrome zachowuje ustawienia użytkownika dotyczące ciasteczek stron trzecich, dlatego działanie zależy od ustawień i trybu pracy. Witryna zależna od ciasteczek stron trzecich musi obsłużyć użytkowników, którzy je blokują.
  • Ochrona przed śledzeniem: Przeglądarki mogą ograniczać przechowywanie danych przez trackery i żądania międzystronowe, także przy wybranych zastosowaniach ciasteczek pierwszej strony. Dokładne działanie zależy od przeglądarki, ustawień i rozpoznanego kontekstu.

Ciasteczka pierwszej strony pozostają użyteczne dla sesji i preferencji, a dostępność ciasteczek stron trzecich zależy od przeglądarki i decyzji użytkownika. Dokumentacja Privacy Sandbox opisuje interfejsy dla wybranych zastosowań, takich jak logowanie federacyjne, sygnały antyfraudowe i pomiar reklam. Ich dostępność i cykl życia zależą od polityki przeglądarki, dlatego aplikacja powinna określać działanie dla sytuacji, w której interfejsy lub ciasteczka są dostępne, oraz dla sytuacji, w której zostały zablokowane.

Powiązane artykuły