Ciasteczka HTTP

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

Wprowadzenie: Rozwiązywanie Problemu Pamięci w Sieci

Jedną z podstawowych zasad projektowych protokołu transferu hipertekstu (HTTP) jest jego bezstanowość. oznacza, że każde żądanie otrzymane przez serwer jest traktowane jako całkowicie niezależne zdarzenie, bez pamięci o jakichkolwiek poprzednich żądaniach od tego samego użytkownika. Serwer jest jak bibliotekarz z krótkotrwałą amnezją; za każdym razem, gdy podchodzisz do lady, jest tak, jakby nigdy wcześniej Cię nie widział.

Ta bezstanowość jest potężną cechą pod względem skalowalności. Każdy serwer może obsłużyć dowolne żądanie, co upraszcza projekt serwera i umożliwia łatwe równoważenie obciążenia. Stanowi jednak poważne wyzwanie przy tworzeniu interaktywnych, spersonalizowanych doświadczeń internetowych, do których jesteśmy dziś przyzwyczajeni. Jak sklep internetowy może zapamiętać produkty, które dodałeś do koszyka, jeśli każde kliknięcie nowego produktu to zupełnie osobne żądanie? Jak serwis społecznościowy utrzymuje Cię zalogowanym, gdy przechodzisz między swoim kanałem a profilem?

Rozwiązaniem tego problemu „amnezji” jest (ang. cookie). Ciasteczka to pamięć sieci, małe fragmenty danych, które pozwalają serwerowi rozpoznać użytkownika w wielu żądaniach, skutecznie tworząc stanową sesję na bazie bezstanowego protokołu.

Jak Działają Ciasteczka: Cyfrowy Uścisk Dłoni

Mechanizm działania ciasteczek jest eleganckim rozszerzeniem cyklu żądanie-odpowiedź HTTP, ułatwionym przez dwa specyficzne nagłówki HTTP.

  1. Krok 1: Serwer Ustawia Ciasteczko

    Kiedy odwiedzasz stronę internetową po raz pierwszy, Twoja przeglądarka wysyła standardowe żądanie HTTP. Serwer, po otrzymaniu tego żądania, może utworzyć unikalny identyfikator dla Twojej sesji. Następnie odsyła ten identyfikator z powrotem do Twojej przeglądarki jako część odpowiedzi, używając nagłówka Set-Cookie.

    -- Nagłówek 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

    Twoja przeglądarka odbiera tę odpowiedź i widzi nagłówek Set-Cookie. Następnie przechowuje ten mały fragment danych (ciasteczko, sessionid=abf892kds9) lokalnie na Twoim urządzeniu, kojarząc go z witryną, która je wysłała (np. example.com).

  3. Krok 3: Przeglądarka Zwraca Ciasteczko przy Kolejnych Żądaniach

    Od tego momentu, za każdym razem, gdy składasz nowe żądanie do tej samej strony internetowej (np. klikając link lub odwiedzając inną podstronę), Twoja przeglądarka automatycznie dołączy zapisane ciasteczko do żądania, używając nagłówka Cookie.

    -- Nagłówek żądania klienta --
    GET /produkty/123 HTTP/1.1
    Host: www.example.com
    Cookie: sessionid=abf892kds9
  4. Krok 4: Serwer Rozpoznaje Użytkownika

    Serwer otrzymuje to nowe żądanie, odczytuje nagłówek Cookie i widzi znajomy identyfikator sesji. Może wtedy wyszukać ten identyfikator w swojej bazie danych, aby odzyskać dane Twojej sesji, takie jak status zalogowania lub przedmioty w koszyku. Pozwala to serwerowi na dostarczenie spersonalizowanej odpowiedzi, skutecznie „pamiętając” Cię z poprzedniej wizyty.

Rodzaje Ciasteczek: Zrozumienie Ich Celu

Nie wszystkie ciasteczka są takie same. Można je klasyfikować na podstawie ich celu, pochodzenia i czasu życia.

Ze względu na Czas Życia:

Ciasteczka Sesyjne
Są to ciasteczka tymczasowe. Istnieją tylko w pamięci tymczasowej przeglądarki i są automatycznie usuwane, gdy tylko zamkniesz przeglądarkę internetową. Nie mają one ustawionego przez serwer atrybutu Expires ani Max-Age. Ciasteczka sesyjne są niezbędne do utrzymania sesji użytkownika podczas jednej wizyty, na przykład utrzymując użytkownika zalogowanym lub pamiętając zawartość koszyka na zakupy.
Ciasteczka Trwałe
Te ciasteczka mają określoną datę wygaśnięcia, ustawioną przez serwer za pomocą atrybutów Expires lub Max-Age. Są one przechowywane na dysku twardym Twojego urządzenia i pozostają tam, dopóki nie wygasną lub nie zostaną ręcznie usunięte. Ciasteczka trwałe służą do zapamiętywania preferencji użytkownika na przestrzeni wielu wizyt, takich jak wybrany język, motyw lub funkcja „Zapamiętaj mnie” na stronach logowania.

Ze względu na Pochodzenie:

Ciasteczka Pierwszej Strony (First-Party)
Są one tworzone i ustawiane bezpośrednio przez stronę internetową (domenę), którą odwiedzasz. Na przykład, gdy logujesz się do example.com, ciasteczko sesyjne ustawione przez example.com jest ciasteczkiem pierwszej strony. Zazwyczaj są one uważane za niezbędne do podstawowego funkcjonowania strony internetowej.
Ciasteczka Trzeciej Strony (Third-Party)
Są one tworzone przez domeny inne niż ta, którą aktualnie odwiedzasz. Zazwyczaj są używane do śledzenia międzystronowego, reklamy i analityki. Na przykład, jeśli strona example.com osadza przycisk „Lubię to” z serwisu społecznościowego lub reklamę z sieci reklamowej, ta zewnętrzna usługa może ustawić ciasteczko w Twojej przeglądarce. Pozwala to stronie trzeciej śledzić Twoje nawyki przeglądania na wszystkich różnych stronach, które korzystają z jej usług. Z powodu obaw o prywatność, ciasteczka trzeciej strony są wycofywane przez większość głównych przeglądarek.

Atrybuty Ciasteczek: Precyzyjna Kontrola

Nagłówek Set-Cookie może zawierać kilka atrybutów, które dają deweloperom precyzyjną kontrolę nad zachowaniem ciasteczka, co jest kluczowe zarówno dla funkcjonalności, jak i bezpieczeństwa.

Set-Cookie: nazwa=wartosc; Expires=data; Path=/; Domain=.example.com; Secure; HttpOnly; SameSite=Strict
Expires i Max-Age
Jak omówiono, czynią one ciasteczko trwałym. Expires określa bezwzględną datę i godzinę wygaśnięcia. Max-Age określa czas życia ciasteczka w sekundach od momentu jego ustawienia, co jest obecnie preferowaną metodą, ponieważ nie zależy od poprawności zegara klienta.
Domain
Ten atrybut określa, które hosty mogą odbierać ciasteczko. Jeśli nie jest określony, domyślnie jest to host serwera źródłowego, a ciasteczko nie będzie wysyłane do subdomen. Jeśli ustawisz Domain=.example.com, ciasteczko będzie wysyłane do example.com i wszystkich jego subdomen, takich jak api.example.com czy blog.example.com.
Path
Ten atrybut wskazuje ścieżkę URL, która musi istnieć w żądanym adresie URL, aby przeglądarka wysłała nagłówek Cookie. Na przykład, jeśli ustawisz Path=/admin, ciasteczko będzie wysyłane tylko w przypadku żądań do stron w katalogu `/admin`, takich jak /admin/dashboard, ale nie do /home.
Secure
Jeśli ta flaga jest obecna, przeglądarka wyśle ciasteczko tylko przez szyfrowane połączenie HTTPS. Jest to kluczowy atrybut bezpieczeństwa, który zapobiega przechwyceniu ciasteczka w formie otwartego tekstu przez niezabezpieczone połączenie HTTP. Wszystkie ciasteczka zawierające wrażliwe informacje, zwłaszcza identyfikatory sesji, muszą mieć flagę Secure.
HttpOnly
Jest to kolejny kluczowy atrybut bezpieczeństwa. Gdy ciasteczko ma flagę HttpOnly, staje się niedostępne dla skryptów po stronie klienta (tj. JavaScriptu działającego w przeglądarce). Zapewnia to ważną obronę przed atakami . Jeśli atakujący zdoła wstrzyknąć złośliwy skrypt na stronę internetową, skrypt ten nie będzie w stanie odczytać ani ukraść ciasteczka HttpOnly, chroniąc w ten sposób tokeny sesji.
SameSite
Ten atrybut zapewnia obronę przed atakami . Kontroluje on, czy przeglądarka wysyła ciasteczko z żądaniami międzystronowymi. Ma trzy możliwe wartości:
  • Strict: Ciasteczko będzie wysyłane tylko w żądaniach pochodzących z tej samej witryny. Nie będzie wysyłane, gdy użytkownik przechodzi do witryny z zewnętrznego linku.
  • Lax: Ciasteczko będzie wysyłane dla żądań w obrębie tej samej witryny, a także dla nawigacji najwyższego poziomu z bezpiecznymi metodami HTTP (jak GET) z zewnętrznych witryn. Jest to domyślne ustawienie w nowoczesnych przeglądarkach. Pozwala to użytkownikom pozostać zalogowanym, gdy klikną na przykład link z wiadomości e-mail.
  • None: Ciasteczko będzie wysyłane ze wszystkimi żądaniami, zarówno w obrębie tej samej witryny, jak i międzystronowymi. To ustawienie wymaga atrybutu Secure i jest zazwyczaj używane dla ciasteczek stron trzecich.

Prywatność, Bezpieczeństwo i Przyszłość Ciasteczek

Chociaż ciasteczka są istotną częścią funkcjonowania nowoczesnej sieci, ich zdolność do śledzenia użytkowników na różnych stronach wzbudziła znaczne obawy o prywatność. Szczególnie ciasteczka śledzące stron trzecich zostały skrytykowane za umożliwianie wszechobecnego nadzoru nad zachowaniem użytkowników online przez firmy reklamowe i zajmujące się eksploracją danych.

W odpowiedzi na to, uchwalono przepisy o ochronie prywatności, takie jak RODO w Europie i CCPA w Kalifornii, wymagające od stron internetowych uzyskania zgody użytkownika przed ustawieniem nieistotnych ciasteczek. Co więcej, producenci przeglądarek podejmują aktywne kroki w celu zwiększenia prywatności użytkowników:

  • Wycofanie Ciasteczek Stron Trzecich: Google Chrome ogłosił plany całkowitego wycofania wsparcia dla ciasteczek stron trzecich, idąc za przykładem przeglądarek takich jak Safari i Firefox, które już je domyślnie blokują. Jest to ogromna zmiana, która zmusza branżę reklamową do znalezienia nowych, bardziej chroniących prywatność technologii.
  • Inteligentna Ochrona przed Śledzeniem: Przeglądarki implementują zaawansowane algorytmy do identyfikacji i ograniczania możliwości trackerów, nawet tych używających ciasteczek pierwszej strony, aby ograniczyć śledzenie międzystronowe.

Sieć zmierza w kierunku bardziej prywatnej przyszłości. Chociaż funkcjonalnie niezbędne ciasteczka pierwszej strony pozostaną podstawową częścią tworzenia stron internetowych, era powszechnego, nieprzejrzystego śledzenia użytkowników za pomocą ciasteczek stron trzecich dobiega końca, otwierając drogę dla nowych technologii w ramach inicjatyw takich jak Privacy Sandbox firmy Google.

Interaktywny sandbox ciasteczek

Zmieniaj atrybuty i testuj różne konteksty zapytań, aby zobaczyć kiedy przeglądarka zapisze lub wyśle ciastko HTTP.

Podgląd nagłówka Set-Cookie

Tak wygląda odpowiedź serwera aplikacyjnego przekazująca ciastko.

Set-Cookie: session_id=abc123; Path=/; Max-Age=1800; SameSite=Lax; Secure; HttpOnly

Atrybuty ciasteczka

Secure (tylko HTTPS)

Powstrzymuje wysyłanie ciasteczka przez zwykłe HTTP.

HttpOnly

Chroni przed odczytem wartości przez document.cookie w skryptach.

Polityka SameSite

Pozwala na nawigację GET najwyższego poziomu z innych stron, blokuje żądania w tle.

Kontekst żądania

Połączenie używa HTTPS

Przełącz aby zasymulować dostarczenie przez HTTPS lub HTTP.

Początkowa odpowiedź logowania

Odpowiedź

Serwer wystawia ciasteczko sesyjne po udanym logowaniu.

200 OK z https://shop.local/login
Inicjator: https://shop.localProtokół: HTTPS
Ciasteczko zapisane
Ciasteczko zostanie zapisane tylko gdy odpowiedź przychodzi przez HTTPS i atrybuty są poprawne.

Dlaczego?

Atrybuty spełniają warunki — ciasteczko zostanie wykorzystane.

Widoczność dla JavaScript

Zablokowane przez HttpOnly — document.cookie nie odczyta wartości.

    Ciasteczka HTTP | Teleinf Edu