1. Wstęp
Plik cookie lub plik cookie HTTP, plik cookie sieciowy, plik cookie przeglądarki to niewielki fragment danych wysyłany ze strony internetowej i przechowywany w przeglądarce użytkownika podczas przeglądania tej witryny. Za każdym razem, gdy użytkownik ładuje witrynę, przeglądarka automatycznie wysyła pliki cookie do serwera sieciowego, aby powiadomić witrynę o wcześniejszych działaniach użytkownika.
Pliki cookie mają być niezawodnym mechanizmem pomagającym witrynom internetowym zapamiętywać informacje o statusie (takie jak pozycje w koszyku) lub przechowywać działania użytkownika (w tym kliknięcia), link, login, strony odwiedzone w ciągu tygodnia, miesiąca lub roku,... ).
Chociaż pliki cookie nie mogą przenosić wirusów ani instalować złośliwego oprogramowania na komputerze użytkownika, stosowanie śledzących plików cookie, a zwłaszcza plików cookie stron trzecich, jest uważane za sposób identyfikacji danych osobowych na podstawie historii przeglądania użytkowników. Pliki cookie mogą zapisywać hasła lub treści wprowadzane przez użytkowników w formularzach HTML, takie jak numery kart kredytowych lub adresy osobiste.
Kiedy użytkownik odwiedza stronę internetową po raz pierwszy, plik cookie jest wysyłany z serwera internetowego do przeglądarki i zapisywany na jego komputerze. Następnie, gdy powróci na stronę, witryna rozpozna go na podstawie informacji zapisanych w pliku cookie.
Uwierzytelniające pliki cookie są powszechną metodą sprawdzania, czy użytkownik jest zalogowany na stronie internetowej, czy nie. Bez takiego mechanizmu serwisowi będzie trudno wiedzieć, kiedy wysłać użytkownikowi dane osobowe i zmusić go do wielokrotnego logowania. Uwierzytelniające pliki cookie, choć bardzo wygodne, stwarzają hakerom możliwość odczytania wrażliwych danych zawartych w plikach cookie, podejmując w ten sposób działania szkodzące użytkownikom.
2. Przegląd plików cookie HTTP
2.1. Historia
Termin „cookie” wywodzi się od terminu „magiczny plik cookie”, który oznacza niezmienny fragment danych wysyłany i odbierany przez program komputerowy. Na pomysł wykorzystania magicznych plików cookie w komunikacji internetowej wpadł programista Lou Montuli w 1994 roku. Pracował wówczas dla Netscape Communications nad projektem tworzenia aplikacji e-commerce dla MCI. Pliki cookies zostały wykorzystane jako rozwiązanie przy budowie wirtualnych koszyków zakupowych, dzięki czemu serwery MCI nie muszą zapisywać statusu transakcji, lecz są one przechowywane na komputerze użytkownika.
Razem z Johnem Giannandreą Montuli napisał pierwszą specyfikację plików cookie Netscape. Wersja 0.0beta Mosaic Netscape, wydana 13 października 1994, obsługiwała pliki cookie. Przy pierwszym użyciu plików cookie (poza laboratorium) sprawdzano, czy klient odwiedzający witrynę Netscape odwiedził ją już wcześniej, czy nie. Montuli uzyskał patent na pliki cookie w 1995 r. Wersja 2 przeglądarki Internet Explorer (wydana w październiku 1995 r.) uwzględniała wykorzystanie plików cookie.
W tym czasie wprowadzenie plików cookie nie było powszechne. W szczególności pliki cookies są domyślnie akceptowane, a Użytkownicy nie są powiadamiani o ich obecności. Opinia publiczna dowiedziała się o plikach cookie dopiero po opublikowaniu artykułu na ich temat w Financial Times 12 lutego 1996 r. Od tego czasu plikom cookie poświęcono wiele uwagi, zwłaszcza zawartym w nich prywatnym informacjom. Pliki cookie omawiano podczas dwóch przesłuchań Federalnej Komisji Handlu Stanów Zjednoczonych w latach 1996 i 1997.
Pierwsza dyskusja na temat formalnej specyfikacji plików cookie rozpoczęła się w kwietniu 1995 r. W celu przeprowadzenia tych prac utworzono specjalną grupę w ramach Internet Engineering Task Force (IETF). Ostatecznie specyfikacja została opublikowana przez grupę w lutym 1997 r. W specyfikacji zdefiniowano pliki cookie stron trzecich jako nieakceptowalne dla wszystkich lub przynajmniej domyślnie włączone.
W kwietniu 2011 roku opublikowano standardową specyfikację plików cookie w praktycznym zastosowaniu w dokumencie RFC 6265 .
2.2. Terminologia
Sesyjne pliki cookie
Sesyjne pliki cookie, zwane także plikami cookie in-memory lub plikami przejściowymi, istnieją tylko w pamięci tymczasowej, podczas gdy użytkownik przechodzi do witryny internetowej. Jeśli w momencie tworzenia pliku cookie nie zostanie ustawiona data ważności lub okres ważności, zostanie ustawiony plik cookie sesji. Zwykle przeglądarki internetowe automatycznie usuwają pliki cookie sesji, gdy użytkownik zamyka przeglądarkę.
Trwałe pliki cookie
Trwałe pliki cookies wydłużają sesję użytkownika. Jeśli maksymalny wiek trwałego pliku cookie wynosi 1 rok, wówczas w tym okresie wartość początkowa ustawiona w pliku cookie będzie wysyłana do serwera za każdym razem, gdy użytkownik odwiedzi witrynę. Może służyć do rejestrowania ważnych informacji, takich jak sposób, w jaki użytkownik po raz pierwszy odwiedził witrynę. Z tego powodu trwałe pliki cookie nazywane są także śledzącymi plikami cookie.
Bezpieczne pliki cookie
Bezpieczny plik cookie to atrybut bezpieczeństwa włączany podczas korzystania z protokołu HTTPS, zapewniający, że plik cookie jest zawsze szyfrowany podczas przesyłania z klienta na serwer, co pomaga uniknąć podsłuchiwania i ujawniania informacji. Ponadto wszystkie pliki cookie muszą być zgodne z polityką tego samego pochodzenia przeglądarki.
HttpTylko pliki cookie
Atrybut HttpOnly plików cookie jest obsługiwany przez większość przeglądarek. Plik cookie sesji HttpOnly będzie używany tylko w jednym żądaniu HTTP (lub HTTPS), ograniczając w ten sposób dostęp interfejsów API innych niż HTTP, takich jak JavaScript. To ograniczenie ogranicza, ale nie eliminuje, kradzieży plików cookie poprzez luki w zabezpieczeniach Cross-site scripting (XSS).
Pliki cookie stron trzecich
Własne pliki cookie to pliki cookie należące do tej samej domeny (lub poddomen w tej samej domenie) wyświetlane w pasku adresu przeglądarki. Pliki cookie stron trzecich to pliki cookie należące do różnych domen wyświetlane w pasku adresu przeglądarki. Strony internetowe mogą zawierać treści z domen stron trzecich (takie jak reklamy banerowe), na podstawie których można śledzić historię przeglądania użytkowników. Ustawienia prywatności większości przeglądarek blokują śledzące pliki cookie innych firm.
Załóżmy na przykład, że użytkownik odwiedza witrynę internetową example1.com . Ta strona zawiera reklamę z ad.foxytracking.com. Po załadowaniu zostaną zapisane pliki cookie ad.foxytracking.com. Następnie odwiedza inną witrynę internetową (example2.com), która również zawiera reklamę z ad.foxytracking.com i również ustawia plik cookie należący do ad.foxytracking.com. Wreszcie oba te pliki cookie zostaną wysłane do reklamodawcy podczas ładowania reklam lub uzyskiwania dostępu do jego witryny internetowej. Reklamodawcy mogą wykorzystywać te pliki cookie do tworzenia historii przeglądania użytkownika na wszystkich stronach internetowych zawierających ich reklamy.
W 2014 r. istniało kilka witryn internetowych, które ustawiały pliki cookie, które mogły być odczytywane przez ponad 100 domen zewnętrznych. Średnio na stronie internetowej ustawionych będzie około 10 plików cookie, a maksymalna liczba plików cookie wynosi ponad 800.
Superciastko
Supercookie to plik cookie pochodzący z domeny najwyższego poziomu, takiej jak .com, lub sufiks publiczny, taki jak .co.uk. Ważne jest, aby supercookies były blokowane przez przeglądarki ze względu na pewne kwestie bezpieczeństwa. Jeśli zostanie odblokowany, osoba atakująca kontrolująca złośliwą witrynę internetową może skonfigurować superplik cookie w celu podszywania się pod żądania użytkowników i wysyłania żądań do innych witryn internetowych współdzielących tę samą domenę najwyższego poziomu lub sufiks publiczny. Na przykład supercookie pochodzący z domeny .com może zaszkodzić żądaniom kierowanym do example.com, nawet jeśli plik cookie nie pochodzi z domeny example.com. Można go wykorzystać do fałszowania loginów lub zmiany informacji o użytkowniku.
Ciasteczka zombie
Pliki cookie Zombie to pliki cookie, które są automatycznie odtwarzane po ich usunięciu przez użytkownika. Odbywa się to za pomocą skryptu, który przechowuje zawartość pliku cookie w innej lokalizacji, takiej jak magazyn treści Flash, sklep HTML5 lub inny mechanizm po stronie klienta.
2.3. Struktura plików cookie
Plik cookie o rozmiarze 4 KB zawiera 7 głównych elementów:
- Nazwa
- Wartość
- Wygasa (data ważności)
- Ścieżka (ścieżka do miejsca, w którym plik cookie jest ważny, „/” oznacza, że plik cookie jest ważny w dowolnej ścieżce)
- Domena
- Bezpieczne
- Tylko Http
Wymagane są dwa pierwsze komponenty (nazwa i wartość).
2.4. Używać
Zarządzanie sesją
Pliki cookie mogą być wykorzystywane do przechowywania danych związanych z użytkownikiem podczas wielu wizyt na stronie internetowej. Pliki cookies to rozwiązanie umożliwiające utworzenie koszyka, czyli wirtualnego koszyka, który pomaga użytkownikom zapisywać wybrane przez nich pozycje podczas przeglądania produktów.
Obecne aplikacje koszyków często przechowują listę pozycji w koszyku w bazie danych po stronie serwera, zamiast przechowywać ją w pliku cookie po stronie klienta. Serwer WWW zazwyczaj wysyła plik cookie zawierający identyfikator sesji – identyfikator sesji (który jest unikalny). Przeglądarka internetowa zwróci ten identyfikator sesji przy każdym żądaniu zakupu użytkownika.
Kolejnym zastosowaniem plików cookies jest umożliwienie użytkownikom logowania się do stron internetowych. Zwykle podczas pierwszego logowania serwer WWW wysyła klientowi plik cookie zawierający identyfikator sesji. Użytkownicy prześlą swoje dane, a aplikacja internetowa uwierzytelni sesję, a następnie umożliwi użytkownikowi korzystanie z jej usług.
Pliki cookie zapewniają szybki i wygodny mechanizm interakcji klient/serwer. Jedną z zalet plików cookies jest to, że przechowują one informacje o użytkowniku w pliku znajdującym się na komputerze użytkownika. To znacznie zmniejsza przestrzeń dyskową serwera i czas przetwarzania.
Spersonalizowane
Pliki cookie mogą być wykorzystywane do zapamiętywania danych osobowych użytkownika podczas jego wizyty na stronie internetowej, aby za każdym razem, gdy ponownie odwiedzi witrynę, wyświetlać mu bardziej odpowiednie treści.
Wybitnym przykładem jest funkcja rekomendacji książek w serwisie amazon.com. Kiedy użytkownik kliknie książkę, Amazon zasugeruje mu kolejne książki, które powinien przeczytać. Sugestie te opierają się na książkach, które użytkownicy przeglądali wcześniej i które zdecydowali się kupić.
Innym przykładem jest funkcja sugestii wyszukiwania w wyszukiwarce Google. Gdy zalogujesz się na swoje konto osobiste i przeprowadzisz wyszukiwanie, Google poda sugestie „tylko dla Ciebie”, a pożądane wyniki zawsze pojawią się na górze listy.
Monitor
Śledzące pliki cookie mogą służyć do śledzenia historii przeglądania użytkownika. Można to również zrobić wykorzystując adres IP komputera wysyłającego żądanie do serwisu lub opierając się na polu Referrer w nagłówku żądania HTTP, jednak pliki cookies zapewniają większą precyzję. Odbywa się to w następujący sposób:
- Jeśli użytkownik odwiedza witrynę, ale to żądanie nie zawiera pliku cookie, serwer zakłada, że użytkownik odwiedza tę witrynę po raz pierwszy; Serwer wygeneruje losowy ciąg znaków i wyśle go jako plik cookie z powrotem do przeglądarki wraz z żądaną stroną internetową.
- Od tego momentu plik cookie będzie automatycznie wysyłany przez przeglądarkę do serwera za każdym razem, gdy zażądana zostanie nowa strona internetowa w tej witrynie, serwer zwróci żądaną stronę internetową w normalny sposób, ale z adresem URL tej strony internetowej i czas. Dostęp zostanie zapisany w pliku dziennika. Analizując informacje zapisane w tym pliku dziennika, ujawniona zostanie historia przeglądania danej osoby, często odwiedzane strony internetowe i nawyki przeglądania.
2.5. Zastosowanie

Pliki cookies to dane przesyłane z serwera do przeglądarki. Przeglądarka będzie następnie odsyłać go do serwera, nie zmieniając zawartej w nim treści, za każdym razem, gdy użytkownik wyśle żądanie do witryny. Pliki cookie mogą być również ustawiane przez język skryptowy, taki jak JavaScript.
Każda przeglądarka internetowa może przechowywać co najmniej 300 plików cookie w pliku 4KB i co najmniej 20 plików cookie na serwer lub domenę.
Skonfiguruj pliki cookie
Serwer WWW i przeglądarka komunikują się ze sobą za pośrednictwem protokołu HTTP (HyperText Transfer Protocol). Na przykład, aby uzyskać dostęp do strony http://www.example.org/index.html, przeglądarka łączy się z serwerem, wysyłając żądanie HTTP w następujący sposób:
![Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa]()
Serwer odpowie, wysyłając do przeglądarki prosty pakiet tekstowy, zwany odpowiedzią HTTP. Pakiet ten może zawierać linię zawierającą zawartość pliku cookie:
![Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa]()
Set-Cookie to pole, które instruuje przeglądarkę, aby przechowywała plik cookie i wysyłała go do serwera w przyszłości za każdym razem, gdy do serwera zostanie wysłane żądanie (jeśli plik cookie nadal wygasł). Na przykład przeglądarka wysyła żądanie do http://www.example.org/spec.html, wysyłając żądanie HTTP w następujący sposób:
![Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa]()
To jest żądanie do innej strony należącej do tego samego serwera. W takim przypadku serwer zrozumie, że to żądanie jest powiązane z poprzednim żądaniem i odpowie, wysyłając żądaną stronę internetową do przeglądarki, ewentualnie dodając inne wartości plików cookie.
Wartość pliku cookie może zostać zmodyfikowana przez serwer poprzez wysłanie do przeglądarki pola Set-Cookie: nazwa=wartość w odpowiedzi HTTP. Przeglądarka zastąpi wówczas starą wartość pliku cookie nową wartością.
Wartość pliku cookie może zawierać dowolny drukowalny znak ASCII z wyjątkiem „,”, „;” i biała przestrzeń. Nazwy plików cookie nie mogą również zawierać znaku „=”, ponieważ jest to znak oddzielający nazwę od wartości.
Termin „kruche ciasteczko” jest czasami używany w odniesieniu do pary nazwa-wartość pliku cookie.
Pliki cookie mogą być również ustawiane przez JavaScript lub podobny język skryptowy. W JavaScript obiekt document.cookie służy do ustawiania plików cookie. Atrybut HttpOnly odpowiada za zapobieganie odczytywaniu zawartości plików cookie przez złe skrypty.
Właściwości plików cookie
Oprócz pary nazwa-wartość serwer może również ustawić szereg innych właściwości plików cookie: domena, ścieżka, wygaśnięcie, maksymalny wiek, bezpieczne i HttpOnly. Przeglądarka nie wyśle tych atrybutów do serwera, wyśle jedynie parę nazwa-wartość. Atrybuty te są wykorzystywane przez przeglądarkę do określenia, kiedy usunąć pliki cookie, zablokować pliki cookie lub wysłać pliki cookie na serwer.
Domena i ścieżka
Domena i ścieżka określają zakres pliku cookie. Pozwalają one przeglądarce określić, kiedy wysłać pliki cookie na serwer. Jeśli nie zostanie określony, domyślnie będzie to domena i ścieżka żądanego obiektu. Istnieje jednak różnica pomiędzy plikiem cookie ustawionym dla foo.com bez atrybutu domeny a plikiem cookie ustawionym z atrybutem domeny foo.com. W pierwszym przypadku plik cookie zostanie wysłany tylko wtedy, gdy pojawi się żądanie do foo.com. W tym drugim przypadku plik cookie zostanie wysłany do wszystkich subdomen foo.com. Poniżej znajduje się przykład dyrektywy Set-Cookie ze strony internetowej po zalogowaniu się użytkownika, z żądania do docs.foo.com:
![Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa]()
Pierwszy plik cookie LSID nie ma atrybutu domeny i ma ścieżkę /konta. Przeglądarka wyśle pliki cookie tylko wtedy, gdy żądana strona znajduje się na stronie docs.foo.com/accounts. Pozostałe dwa pliki cookie, HSID i SSID, są wysyłane z powrotem do serwera, jeśli pojawi się żądanie do dowolnej subdomeny foo.com.
Pliki cookie można również ustawić tylko dla domeny głównej i jej subdomen. Ustawianie plików cookies na www.foo.com z poziomu www.bar.com nie będzie dozwolone ze względów bezpieczeństwa.
Wygasa i maksymalny wiek
Atrybut Expires informuje przeglądarkę, kiedy usunąć plik cookie. Data w Expires wygląda następująco: „Wdy, DD Mon RRRR HH:MM:SS GMT”. Max-Age służy również do wskazania daty ważności pliku cookie. Rozważmy następujący przykład:
![Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa]()
Pierwszy plik cookie traci ważność 15 stycznia 2013 r. i po jego wygaśnięciu będzie używany przez przeglądarkę. Drugi plik cookie made_write_conn nie traci ważności i jest używany jako plik cookie sesji, zostanie usunięty po wyłączeniu przeglądarki. Trzeci plik cookie reg_fb_gate ma datę ważności w przeszłości i zostanie natychmiast usunięty.
Bezpieczne i tylko Http
Właściwości Secure i HttpOnly mają wartość null; zamiast tego ich obecność wskazuje, że zastosowano podstawy Secure i HttpOnly.
Atrybut Bezpieczne utrzymuje transmisję plików cookie w ramach szyfrowanego połączenia. Jeśli serwer WWW utworzy plik cookie z bezpiecznym atrybutem z niezabezpieczonego połączenia, plik cookie może nadal zostać przechwycony przez atak typu man-in-the-middle.
Atrybut HttpOnly instruuje przeglądarkę, aby nie ujawniała plików cookie za pośrednictwem połączenia innego niż HTTP (lub HTTPS), takiego jak JavaScript, i dlatego utrudnia uzyskanie plików cookie poprzez wykorzystanie luk w zabezpieczeniach Cross-Site Scripting (XSS).
3. Pewne kwestie bezpieczeństwa podczas korzystania z plików cookies
Jeśli witryna internetowa używa identyfikatora sesji do identyfikacji sesji użytkownika, osoba atakująca może potencjalnie ukraść plik cookie, aby podszyć się pod użytkownika. Oto kilka typowych scenariuszy kradzieży plików cookie:
Podsłuchiwanie
![Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa]()
Ruch w sieci może zostać przechwycony i odczytany przez osobę trzecią (inną niż odbiorca i nadawca). Ten ruch obejmuje pliki cookie. Jeżeli transmisja nie jest szyfrowana, osoba atakująca może odczytać wrażliwe informacje zawarte w pliku cookie. Wykorzystując te informacje, osoby atakujące będą podszywać się pod użytkowników w celu wykonywania niebezpiecznych działań, takich jak transakcje bankowe.
Problem ten można rozwiązać stosując bezpieczny protokół pomiędzy komputerem użytkownika a serwerem – protokół HTTPS. Serwer może używać flagi Bezpieczne podczas ustawiania plików cookie. Plik cookie zostanie wówczas przesłany wyłącznie zaszyfrowanym kanałem, takim jak połączenie SSL.
Skrypty między witrynami
![Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa]()
Języki skryptowe, takie jak JavaScript, mogą odczytywać wartości plików cookie i wysyłać je do dowolnych serwerów.
Załóżmy, że w witrynie występuje błąd skryptu między witrynami, hakerzy mogą wstawić złośliwy kod, taki jak następujący:
![Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa Web11: Pliki cookie HTTP i niektóre problemy bezpieczeństwa]()
Kiedy ofiara kliknie powyższy link, przeglądarka wykona skrypt z atrybutem onclick: wyśle plik cookie ofiary do serwera atakującego.com.
Cross-site scripting to jedna z częstszych podatności stron internetowych (trzecia pozycja na liście 10 najczęściej występujących luk w 2013 roku - według OWASP).
Ryzyko wystąpienia tej luki można ograniczyć poprzez ustawienie flagi HttpOnly dla plików cookie. W tym czasie pliki cookies nie będą dostępne dla języków skryptowych.
Fałszywe żądanie między witrynami
CSRF (Cross-site request forgery), czyli atak jednym kliknięciem, to metoda wykorzystania luk w zabezpieczeniach witryny internetowej, w wyniku której nieautoryzowane polecenia są wykonywane przez ofiary – użytkowników, którzy są autoryzowani przez witrynę bez ich wiedzy.
CSRF oszuka przeglądarkę ofiary, aby wysłała żądania http do aplikacji internetowych. Jeżeli sesja ofiary nie wygasła, powyższe żądania zostaną zrealizowane z wykorzystaniem praw uwierzytelniania ofiary.
Na przykład ofiara Bob dokonuje transakcji na stronie internetowej określonego banku X. Fred jest napastnikiem, ten facet wie, jak działa witryna banku X, gdy chce przelać pieniądze z konta A na konto B w następujący sposób:
http://bank.example.com/withdraw?account=accountA&amount=100&for=accountB
Wyśle Bobowi złośliwą wiadomość.
Jeśli bank X przechowuje informacje uwierzytelniające użytkownika w pliku cookie, a Bob kliknie powyższy link, pieniądze Boba zostaną przekazane Fredowi.
Aby ograniczyć to ryzyko, dla plików cookie można ustawić parametry Expires.
4. Wniosek
Pliki cookie są obecnie używane w większości aplikacji internetowych. Zawiera także potencjalne zagrożenia, mające istotny wpływ na użytkowników. Dlatego po stronie programisty musimy dobrze rozumieć pliki cookie i wiedzieć, jak ustawić niezbędne parametry, aby aplikacja była bezpieczniejsza przed atakami hakerów.