Czym są pliki cookie

Plik cookie to fragment danych przechowywanych w przeglądarce, który służy do utrzymania stanu i innych informacji potrzebnych witrynie do realizacji jej funkcji.

Plik cookie to mały plik przechowywany przez witrynę na komputerze użytkownika. Zawiera on informacje, które są przesyłane między przeglądarką a witryną.

Każdy plik cookie to para klucz-wartość wraz z kilkoma atrybutami, które określają, kiedy i gdzie jest używany ten plik cookie. Te atrybuty służą do ustawiania dat ważności lub wskazywania, że plik cookie powinien być wysyłany tylko przez HTTPS. Plik cookie można ustawić w nagłówku HTTP lub za pomocą interfejsu JavaScript.

Pliki cookie to jedna z dostępnych metod dodawania stałego stanu do witryn. Z biegiem lat możliwości tych rozwiązań były coraz większe, jednak wciąż były na niej pewne problemy. Aby rozwiązać ten problem, przeglądarki (w tym Chrome, Firefox i Edge) zmieniają swoje działanie, aby wymuszać stosowanie ustawień domyślnych chroniących prywatność.

Pliki cookie w działaniu

Załóżmy, że masz bloga, na którym chcesz wyświetlać użytkownikom informacje o nowościach. Użytkownicy mogą zamknąć promocję, a przez pewien czas nie zobaczą jej ponownie. Możesz zapisać to ustawienie w pliku cookie, ustawić go tak, aby wygasał po miesiącu (2 600 000 sekund) i wysyłać go tylko przez HTTPS. Nagłówek mógłby wyglądać tak:

Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Trzy pliki cookie wysyłane z serwera do przeglądarki w odpowiedzi
Serwery ustawiają pliki cookie za pomocą nagłówka Set-Cookie.

Gdy czytelnik wyświetli stronę, która spełnia te wymagania (nawiązane z bezpiecznym połączeniem), a plik cookie ma mniej niż miesiąc, przeglądarka wyśle w żądaniu ten nagłówek:

Cookie: promo_shown=1
Trzy pliki cookie wysyłane z przeglądarki na serwer w żądaniu
Przeglądarka wysyła pliki cookie z powrotem do nagłówka Cookie.

Możesz też dodawać i odczytywać pliki cookie dostępne dla tej witryny w języku JavaScript za pomocą document.cookie. Przypisanie do document.cookie spowoduje utworzenie lub zastąpienie pliku cookie z tym kluczem. Możesz na przykład spróbować wykonać te czynności w konsoli JavaScriptu w przeglądarce:

→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"

Odczytanie document.cookie spowoduje wyświetlenie wszystkich plików cookie dostępnych w bieżącym kontekście. Poszczególne pliki cookie są rozdzielone średnikami:

→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
JavaScript uzyskuje dostęp do plików cookie w przeglądarce
JavaScript może uzyskać dostęp do plików cookie za pomocą document.cookie.

Jeśli spróbujesz to zrobić na kilku popularnych witrynach, zauważysz, że większość z nich tworzy znacznie więcej niż tylko 3 pliki cookie. W większości przypadków pliki te są wysyłane przy każdym żądaniu wysyłanym do danej domeny, co ma wiele konsekwencji. Przepustowość przesyłania jest często ograniczona niż pobieranie danych dla użytkowników, więc narzut wszystkich żądań wychodzących zwiększa opóźnienie czasu do pierwszego bajtu. Stosuj rozsądną liczbę i rozmiar plików cookie. Używaj atrybutu Max-Age, aby mieć pewność, że pliki cookie nie będą przechowywane dłużej, niż jest to konieczne.

Czym są własne pliki cookie i pliki cookie innych firm?

Jeśli wrócisz do listy witryn, które odwiedzałeś wcześniej, prawdopodobnie zauważysz, że znajdują się tam pliki cookie z różnych domen, a nie tylko tej, którą odwiedzasz. Pliki cookie, które pasują do domeny bieżącej witryny (czyli tego, co widać na pasku adresu przeglądarki), są nazywane własnymi plikami cookie. Podobnie pliki cookie z domen innych niż obecna witryna są nazywane plikami cookie innych firm. Nie jest to etykieta bezwzględna, lecz powiązana z kontekstem użytkownika. Ten sam plik cookie może być własny lub innej firmy, w zależności od tego, w jakiej witrynie aktualnie przegląda użytkownik.

Trzy pliki cookie wysyłane do przeglądarki z różnych żądań na tej samej stronie
Pliki cookie mogą pochodzić z różnych domen na jednej stronie.

Kontynuując powyższy przykład, załóżmy, że jeden z postów na Twoim blogu zawiera zdjęcie wyjątkowo wyjątkowego kota, które jest hostowane pod adresem /blog/img/amazing-cat.png. Ktoś inny używa ich bezpośrednio na swojej stronie, bo to takie piękne zdjęcie. Jeśli użytkownik odwiedził Twój blog i ma plik cookie promo_shown, to gdy wyświetli mu plik amazing-cat.png w witrynie innej osoby, w żądaniu o obrazie zostanie wysłany plik cookie. Nikomu to nie jest przydatne, ponieważ właściwość promo_shown nie jest używana do niczego w witrynie tej osoby, a jedynie zwiększa napięcie związane z żądaniem.

Jeśli to nieoczekiwany efekt, dlaczego chcesz to zrobić? To właśnie ten mechanizm umożliwia witrynom zachowanie stanu, gdy są używane w kontekście innych firm. Jeśli np. umieścisz w witrynie film z YouTube, użytkownicy zobaczą w odtwarzaczu opcję „Do obejrzenia”. Jeśli użytkownik jest już zalogowany w YouTube, sesja jest udostępniana w odtwarzaczu umieszczonym w odtwarzaczu przez plik cookie innej firmy. Oznacza to, że przycisk „Do obejrzenia” po prostu zapisze film za jednym razem, zamiast prosić go o zalogowanie się lub opuszczenie strony z powrotem do YouTube.

Ten sam plik cookie wysyłany w 3 różnych kontekstach
W kontekście firmy zewnętrznej plik cookie jest wysyłany, gdy odwiedzasz inne strony.

Jedną z właściwości kulturowych internetu jest to, że zwykle jest on otwarty domyślnie. Właśnie dzięki temu wiele osób może tworzyć własne treści i aplikacje. Wiąże się to jednak z kilkoma obawami dotyczącymi bezpieczeństwa i prywatności. Ataki polegające na fałszowaniu żądań między witrynami (CSRF) polegają na tym, że pliki cookie są dołączane do każdego żądania dotyczącego danego źródła, niezależnie od tego, kto je zainicjował. Na przykład jeśli otworzysz evil.example, może to spowodować wysłanie żądania do your-blog.example, a przeglądarka z przyjemnością dołączy powiązane pliki cookie. Jeśli Twój blog nie sprawdza, w jaki sposób weryfikuje te żądania, evil.example może wywołać takie działania jak usunięcie postów lub dodanie własnych treści.

Użytkownicy coraz częściej wiedzą, jak pliki cookie mogą służyć do śledzenia ich aktywności w wielu witrynach. Do tej pory nie było jednak sposobu na wyraźną informację o zamiarze pliku cookie. Plik cookie promo_shown powinien być wysyłany wyłącznie we własnym kontekście, natomiast plik cookie sesji dla widżetu, który jest umieszczony w innych witrynach, celowo zapewnia dostęp do stanu zalogowania w kontekście firmy zewnętrznej.

Możesz wyraźnie określić swoją intencję za pomocą pliku cookie, ustawiając odpowiedni atrybut SameSite.

Aby dowiedzieć się, jak rozpoznawać własne pliki cookie i ustawiać odpowiednie atrybuty, przeczytaj artykuł o przepisach na własne pliki cookie.