Cookies, technicznie i o zmianach w ustawie
W ostatnich tygodniach bardzo dużo się dzieje w Internecie wokół cookies (czyli tzw. ciasteczek). Wszystko za sprawą nowelizacji ustawy, która powoduje, że autorzy witryn, które cookies wykorzystują, muszą o tym poinformować swoich użytkowników. Ale co to są ciasteczka, co ze sobą niosą i o co chodzi z tą ustawą? O tym poniżej.
HTTP i cookies
Internet opiera się w dużej mierze o protokół HTTP. Komunikacja ze stroną internetową przebiega w skrócie w taki sposób:
- Przeglądarka (lub inne oprogramowanie) wysyła żądanie do serwera WWW, które zawiera nagłówki (informacje o tym co jest żądane, o przeglądarce, o użytkowniku, itp.) oraz opcjonalną treść (czyli np. dane wysyłane z formularza).
- Serwer interpretuje takie zapytanie i w zależności od zawartości przygotowuje odpowiedź, np. w postaci dokumentu HTML.
- Odpowiedź wysyłana jest z powrotem do przeglądarki również w postaci nagłówków (informacje o zawartości) oraz samej treści odpowiedzi przygotowanej wcześniej.
- Przeglądarka po otrzymaniu odpowiedzi interpretuje ją i w odpowiedni sposób prezentuje użytkownikowi. Jeżeli to jest strona WWW, która zawiera odnośniki do obrazków i innych plików, do każdego z nich wysyłane jest kolejne żądanie do serwera WWW.
Gdzie w tym wszystkim znajdują się cookies? W części nagłówkowej żądania i odpowiedzi. Jeżeli serwis WWW chce, aby przeglądarka zapisała informacje w swojej pamięci i przekazała je w kolejnych żądaniach z powrotem do serwisu, instrukcje wysyła jako nagłówek (Set-Cookie), który zawiera dla każdego ciastka nazwę, zawartość oraz opcjonalnie czas ważności (lub „do końca sesji”) i zakres widoczności (domena, ścieżka, protokół, szyfrowanie). Przeglądarka zapisuje te informacje w dowolny przewidziany przez jej twórców sposób oraz wysyła, również poprzez nagłówki (Cookie) nazwy i treści ciastek. I to jest wszystko jeżeli chodzi o technologię.
Do czego służą cookies
Jak widać wyżej, przeglądanie stron WWW to seria żądań i odpowiedzi pomiędzy przeglądarką na urządzeniu dostępowym użytkownika, a serwerem WWW. Przy takiej konstrukcji nie ma możliwości (poza np. umieszczaniem tej informacji w adresie każdej kolejnej strony co byłoby bardzo uciążliwe) rozpoznania czy dany użytkownik wchodzący na stroną to jest ten sam, który był na niej przed chwilą, czy już nowy.
Pierwszy bardzo ważny przykład użycia to logowanie do serwisu. Użytkownik podaje nazwę użytkownika i hasło, i jeżeli były one prawidłowe, z ciastkiem użytkownika na serwerze powiązana zostaje informacja, która pozwala przy kolejnym wejściu na stronę uznanie użytkownika za zalogowanego. Drugie popularne wykorzystanie to statystyki. Każdy, kto chociaż trochę przeglądał statystyki stron WWW, zapewne spotkał się z dwoma hasłami – unikalni użytkownicy (unique visitors) i odsłony (pageviews). Przy pierwszym wejściu na stronę, użytkownik jest liczony jako unikalny oraz zliczana jest odsłona. Dodatkowo wysłana zostaje informacja o ciastku. Jeśli użytkownik wraca z ciastkiem, nie jest już unikalnym użytkownikiem i liczone są tylko odsłony.
Czym cookies nie są
Cookies często są mylnie określane jako pliki, a przecież nie muszą być plikami. Mechanizm ich przechowywania leży w gestii (twórców) przeglądarki. Bardzo często jest to wewnętrzny system bazodanowy, gdzie ciasteczka nie mają z systemem plików niczego wspólnego.
Ciasteczkami nie da się przesłać żadnych wirusów, co też jest (było?) dość popularnym mitem. Ciasteczka, jak pisałem wyżej, to tylko i wyłącznie dane tekstowe przypisane do nazwy i adresu strony. Ciężko sobie wyobrazić kawałek tekstu będący wirusem.
Możliwość śledzenia użytkownika za pomocą ciasteczek też jest dość ograniczona. Zabezpieczenia przeglądarek przed tym, aby ciasteczka były odczytywane przez niepowołaną stronę są coraz lepsze, a więc użytkownicy są coraz bardziej bezpieczni.
Potencjalne zagrożenia
Same cookies w mojej ocenie nie niosą za sobą praktycznie żadnych zagrożeń. Problemem może być ich implementacja w serwisach WWW. Bardzo często takie aplikacje ufają bezgranicznie informacji zawartej w ciastku zawierającym ID sesji. Mimo, że np. w PHP domyślnie liczba różnych ID sesji ma około 50 cyfr i jej zgadnięcie jest trudne, to przechwycenie już jest względnie łatwe. „Wystarczy” podsłuchać jedno żądanie zalogowanego użytkownika. Dlatego serwisy internetowe powinny stosować dodatkowe zabezpieczenia w postaci szyfrowania (HTTPS) albo sprawdzania innych danych użytkownika.
Innym zagrożeniem, tym bardziej zależnym od implementacji, jest sposób wykorzystania danych z ciastek. Dane te traktowane są w aplikacjach podobnie jak inne formy zapytania (POST, parametry URL), dlatego dotyczą ich wszystkie zagrożenia typu XSS, SQL injection, itp.
Ustawa o zmianie ustawy
Ustawa tak popularna ostatnio w Internecie w kontekście cookies to Ustawa z dnia 16 lipca 2004 r. Prawo telekomunikacyjne, a przede wszystkim jej artykuł 173. Ustęp 1 mówi o przychowywaniu i odczytywaniu informacji przechowywanych w przeglądarkach („telekomunikacyjnym urządzeniu końcowym”), ustęp 3 wyłącza sytuacje, kiedy usługa była żądana przez użytkownika. Interpretacja tego zapisu może być różna, ale raczej jasno wynika z tego, że nie trzeba informować zawsze i każdego. W szczególności, jeżeli nasza aplikacja używa ciasteczek do zapisania informacji o zalogowanym użytkowniku, to wyraźnie jest to na jego żądanie oraz jest konieczne do działania aplikacji. Co innego cookies używane do zliczania statystyk, przede wszystkim tych, wystawianych przez aplikacje zewnętrzne (jak Google Analytics albo Piwik). Jeżeli na stronie umieszczone są tego typu skrypty, ostrzegać raczej należy.
Sposób ostrzegania nie został jednak opisany (określenia „bezpośrednio”, „w sposób jasny, łatwy i zrozumiały” są bardzo nieostre), dlatego właściciele stron mają tutaj dużo możliwości interpretacji. Wiele serwisów decyduje się na wyraźnie wydzielone z grafiki strony ostrzeżenie w górnej części serwisu. Czasem ograniczają się do krótkiej notki, np. w stopce. Ale na pewno nie polecam tego, co na swojej stronie zrobiło UPC, czyli blokowanie całej strony (okno modalne) dopóki użytkownik nie potwierdzi, że przeczytał informację:
Moje zaniepokojenie budzi również nieprecyzyjny opis tego, o czym należy ostrzegać. „Przechowywanie informacji lub uzyskiwanie dostępu do informacji już przechowywanej w telekomunikacyjnym urządzeniu końcowym abonenta lub użytkownika końcowego”. Domyślnie jest to rozumiane jako pliki cookie, ale tak naprawdę wszystko, co występuje na stronach WWW może być objęte taką definicją. Obrazki, arkusze CSS, skrypt JavaScript – to wszystko może być przecież zachowane w pamięci cache przeglądarki, a potem odczytywane i przetwarzane przez serwis. Czy to by oznaczało, że użytkownicy powinni być ostrzegani, że „na naszej stronie wykorzystujemy obrazki”? A co z innymi technologiami? Aplikacje JavaScriptowe dane o sesji mogą przechowywać w Web Storage (technologia przechowywania danych z HTML5) i w ogóle nie używać ciastek, a zachować wszystkie funkcjonalności (łącznie ze „śledzeniem” użytkowników).
Niestety, ustawa jest nieprecyzyjna, niedokładna, ściganie jest nieokreślone, a mimo wszystko jej stosowanie w serwisach WWW jest w mojej ocenie nieadekwatnie powszechne i inwazyjne.
Autorzy zdjęć wykorzystanych we wpisie: Kimberly Vardeman i Robyn Lee