Przejdź do głównej zawartości

Sesje i cookies - zastosowania i zagrożenia

Stan w bezstanowym protokole

HTTP jest protokołem bezstanowym - każdy request jest niezależny. Ale aplikacje webowe potrzebują “pamiętać” użytkownika: czy jest zalogowany, co ma w koszyku, jakie są jego preferencje. Do tego służą sesje i cookies. Cookie to mały plik przechowywany w przeglądarce. Sesja to mechanizm, gdzie ID sesji jest w cookie, a prawdziwe dane są bezpiecznie na serwerze. W tej prezentacji wyjaśnisz jak to działa, do czego się używa i jakie są zagrożenia związane z kradzieżą sesji czy niewłaściwą konfiguracją cookies.

  1. Co to jest cookie i sesja? - Definicje i różnice
  2. Jak to działa? - Mechanizm wymiany cookie między przeglądarką a serwerem
  3. Kiedy używać? - Logowanie, koszyk, preferencje, “zapamiętaj mnie”
  4. Na co uważać? - Kradzież sesji, session fixation, brak flag bezpieczeństwa
  5. Jak robić dobrze? - HttpOnly, Secure, SameSite, regeneracja ID sesji
  1. Co to jest cookie?

    • Mały plik tekstowy przechowywany w przeglądarce
    • Wysyłany automatycznie z każdym requestem do domeny
    • Może zawierać: ID sesji, preferencje, tokeny
    • Ma datę wygaśnięcia (sesyjne vs persistent)
  2. Co to jest sesja?

    • Mechanizm przechowywania danych po stronie serwera
    • Cookie zawiera tylko ID sesji (np. PHPSESSID)
    • Dane sesji są na serwerze (pliki lub baza danych)
    • Bezpieczniejsze niż przechowywanie wszystkiego w cookie
  3. Jak to działa w PHP

    • session_start() - rozpoczyna sesję
    • $_SESSION['user_id'] = 123 - zapis danych
    • session_destroy() - kończy sesję
    • Schemat: przeglądarka ↔ cookie (ID) ↔ serwer (dane)
  4. Typowe zastosowania

    • Logowanie użytkownika
    • Koszyk zakupowy
    • Preferencje (język, motyw)
    • Formularze wielokrokowe
  5. Zagrożenia i obrona

    • Session hijacking - kradzież ID sesji
    • Session fixation - wymuszenie ID sesji
    • Flagi: HttpOnly, Secure, SameSite

Schemat sesji

Przeglądarka → Cookie (PHPSESSID=abc123) → Serwer → Plik sesji z danymi użytkownika

Przykład kodu PHP

session_start(), $_SESSION, ustawienia cookie_params

Zawartość:

  • Definicja cookie i sesji - czym się różnią
  • 1 schemat pokazujący przepływ cookie między przeglądarką a serwerem
  • 1 krótki przykład kodu PHP z session_start() i $_SESSION

Forma: 10 slajdów, 10 minut prezentacji

Ocena: 3.0
  1. Slajd tytułowy - Tytuł, autorzy, data
  2. Agenda - Plan prezentacji
  3. Problem - HTTP jest bezstanowy, jak “pamiętać” użytkownika?
  4. Co to jest cookie? - Definicja, przykład
  5. Co to jest sesja? - Definicja, różnica od cookie
  6. Schemat działania - Przeglądarka ↔ Cookie ↔ Serwer
  7. Sesje w PHP - session_start(), $_SESSION, przykład kodu
  8. Zastosowania - Logowanie, koszyk, preferencje
  9. Zagrożenia - Kradzież sesji, session fixation
  10. Bezpieczeństwo cookies - HttpOnly, Secure, SameSite
  11. Dobre praktyki - Regeneracja ID, timeout, czego nie trzymać
  12. Podsumowanie i źródła

Użytkownik zaznacza “Zapamiętaj mnie” przy logowaniu. To nie przedłuża sesji! To osobny, persistent cookie z tokenem. Sesja nadal wygasa po zamknięciu przeglądarki. Token “zapamiętaj mnie” służy do automatycznego utworzenia nowej sesji przy następnej wizycie.

Poprawne wylogowanie powinno:

  1. Usunąć dane z $_SESSION
  2. Wywołać session_destroy()
  3. Usunąć cookie sesji z przeglądarki
  4. Wygenerować nowy ID sesji dla bezpieczeństwa

Użytkownik loguje się do aplikacji przez publiczne WiFi bez HTTPS. Atakujący przechwytuje cookie sesji (PHPSESSID). Kopiuje je do swojej przeglądarki i… jest zalogowany jako ofiara. Rozwiązanie: zawsze HTTPS + flaga Secure na cookies.

Przypadek: Panel administracyjny

Firma ma panel admina do zarządzania treścią. Sesja admina trwa 8 godzin, nie ma regeneracji ID po logowaniu, cookies bez flagi HttpOnly.

Atak: Atakujący znajduje podatność XSS na stronie publicznej. Wstrzykuje skrypt kradnący cookies. Admin odwiedza stronę, skrypt wysyła jego PHPSESSID do atakującego. Atakujący ma dostęp do panelu przez następne 8 godzin.

Rozwiązanie:

  • Flaga HttpOnly - JavaScript nie może odczytać cookie
  • Regeneracja ID sesji po logowaniu
  • Krótszy timeout dla sesji admina (np. 30 minut)
  • Sprawdzanie IP/User-Agent sesji

Prosty rysunek

Narysuj schemat: przeglądarka → cookie z ID → serwer → dane sesji. To wyjaśnia 90% tematu.

Flagi bezpieczeństwa

Jeden slajd: HttpOnly, Secure, SameSite. Krótko, ale koniecznie.

Przykład z projektu

Pokaż jak użyłbyś sesji w swoim projekcie semestralnym - to robi wrażenie.

Nie komplikuj

Sesje i cookies to prosty temat. Nie dodawaj niepotrzebnych detali.

Prezentacja to umiejętność zawodowa!

Sesje i cookies to podstawa każdej aplikacji webowej z logowaniem. Zrozumienie tego tematu jest niezbędne dla każdego web developera.

Wykorzystajcie lekcje - przygotujcie schemat sesji i przećwiczcie jego wyjaśnianie!

Współpraca to klucz - podzielcie się: jedna osoba zajmuje się mechaniką (jak działa), druga bezpieczeństwem (zagrożenia i obrona).

Pamiętajcie: Cookie to tylko pojemnik. Wrażliwe dane trzymaj na serwerze, w sesji.