1. Úvod
Cookie , nebo HTTP cookie, web cookie, cookie prohlížeče je malá část dat odeslaná z webové stránky a uložená v prohlížeči uživatele při procházení této webové stránky. Pokaždé, když uživatel načte webovou stránku, prohlížeč automaticky odešle soubory cookie na webový server, aby upozornil web na předchozí akce uživatele.
Soubory cookie jsou navrženy jako spolehlivý mechanismus, který pomáhá webovým stránkám zapamatovat si informace o stavu (jako jsou položky v nákupním košíku) nebo ukládat aktivity uživatele (včetně kliknutí), odkaz, přihlašovací údaje, stránky navštívené během týdne, měsíce nebo roku,... ).
Přestože soubory cookie nemohou přenášet viry ani nemohou instalovat malware do vašeho počítače, použití sledovacích souborů cookie a zejména souborů cookie třetích stran je považováno za způsob, jak identifikovat osobní údaje z historie prohlížení uživatelů. Soubory cookie mohou ukládat hesla nebo obsah, který uživatelé zadávají do html formulářů, jako jsou čísla kreditních karet nebo osobní adresy.
Když uživatel poprvé navštíví webovou stránku, odešle se cookie z webového serveru do prohlížeče a uloží se do jeho počítače. Poté, když se vrátí na webovou stránku, webová stránka ho rozpozná díky informacím uloženým v cookie.
Autentizační soubory cookie jsou běžnou metodou používanou k určení, zda je uživatel na webové stránce přihlášen či nikoli. Bez takového mechanismu bude pro web obtížné vědět, kdy má uživateli odeslat osobní údaje, a donutit uživatele k vícenásobnému přihlášení. Autentizační soubory cookie, i když jsou velmi pohodlné, vytvářejí příležitosti pro hackery číst citlivá data v souborech cookie, a tím provádět akce, které poškozují uživatele.
2. Přehled HTTP Cookies
2.1. Dějiny
Termín cookie je odvozen od termínu magické cookie, což je neměnná část dat odeslaná a přijatá počítačovým programem. Programátor jménem Lou Montuli přišel s nápadem používat magické cookies ve webové komunikaci v roce 1994. V té době pracoval pro Netscape Communications na projektu vývoje aplikací pro e-commerce pro MCI. Soubory cookie byly použity jako řešení při vytváření virtuálních nákupních košíků, které serverům MCI pomáhají, aby nemusely ukládat stav transakcí, ale místo toho se ukládají na počítač uživatele.
Společně s Johnem Giannandreou napsal Montuli první specifikaci souborů cookie Netscape. Verze 0.0beta Mosaic Netscape, vydaná 13. října 1994, podporovala soubory cookie. První použití cookies (mimo laboratoř) zkontrolovalo, zda zákazník navštěvující webovou stránku Netscape již dříve navštívil či nikoli. Montuli získal patent na soubory cookie v roce 1995. A Internet Explorer verze 2 (vydaný v říjnu 1995) začlenil použití souborů cookie.
Zavedení cookies nebylo v této době rozšířené. Zejména cookies jsou standardně přijímány, uživatelé nejsou o jejich přítomnosti upozorňováni. Veřejnost se o cookies dozvěděla až poté, co o nich 12. února 1996 vyšel článek ve Financial Times. Od té doby se cookies těší velké pozornosti, zejména soukromým informacím v nich obsaženým. Soubory cookie byly diskutovány na dvou slyšeních americké Federální obchodní komise v letech 1996 a 1997.
První diskuse o formální specifikaci souborů cookie začala v dubnu 1995. Za účelem provedení této práce byla vytvořena zvláštní skupina v rámci Internet Engineering Task Force (IETF). Specifikace byla konečně publikována skupinou v únoru 1997. Specifikace definovala soubory cookie třetích stran jako buď nepřijatelné pro všechny, nebo alespoň jako výchozí povoleny. V dubnu 2011 byla v dokumentu RFC 6265
zveřejněna standardní specifikace pro soubory cookie v praxi .
2.2. Terminologie
Soubory cookie relací
Soubory cookie relace, nazývané také soubory cookie v paměti nebo dočasné soubory cookie, existují pouze v dočasné paměti, když uživatel přejde na webovou stránku. Pokud není v době vytvoření souboru cookie nastaveno datum vypršení platnosti nebo interval platnosti, bude nastaven soubor cookie relace. Za normálních okolností webové prohlížeče automaticky odstraní soubory cookie relace, když uživatel zavře prohlížeč.
Trvalé soubory cookie
Trvalé soubory cookie prodlužují relaci uživatele. Pokud je trvalý soubor cookie nastaven na maximální věk 1 rok, pak během tohoto období bude počáteční hodnota nastavená v souboru cookie odeslána serveru pokaždé, když uživatel navštíví webovou stránku. Lze jej použít k zaznamenání důležitých informací, například jak uživatel poprvé navštívil web. Z tohoto důvodu se trvalé soubory cookie také nazývají sledovací soubory cookie.
Zabezpečené soubory cookie
Secure cookie je bezpečnostní atribut povolený při používání HTTPS, který zajišťuje, že cookie je vždy zašifrována při přenosu z klienta na server, což pomáhá zabránit odposlechu a odhalení informací. Kromě toho musí všechny soubory cookie splňovat zásady stejného původu prohlížeče.
Soubory cookie HttpOnly
Atribut souborů cookie HttpOnly podporuje většina prohlížečů. Soubor cookie relace HttpOnly bude použit pouze v jednom požadavku HTTP (nebo HTTPS), čímž se omezí přístup jiným než HTTP API, jako je Javascript. Toto omezení zmírňuje, ale neeliminuje krádež souborů cookie prostřednictvím chyb zabezpečení Cross-site scripting (XSS).
Soubory cookie třetích stran
Cookies první strany jsou soubory cookie patřící do stejné domény (nebo subdomén v rámci stejné domény) zobrazené v adresním řádku prohlížeče. Soubory cookie třetích stran jsou soubory cookie patřící různým doménám zobrazeným v adresním řádku prohlížeče. Webové stránky mohou mít obsah z domén třetích stran (např. bannerové reklamy), ze kterých lze sledovat historii procházení uživatelů. Většina nastavení ochrany osobních údajů prohlížečů blokuje sledovací soubory cookie třetích stran.
Předpokládejme například, že uživatel navštíví web example1.com . Tento web obsahuje reklamu z ad.foxytracking.com. Po načtení se soubory cookie ad.foxytracking.com uloží. Poté navštíví další webovou stránku (example2.com), která také obsahuje reklamu z ad.foxytracking.com, a ta také nastaví cookie patřící k ad.foxytracking.com. Nakonec budou oba tyto soubory cookie odeslány inzerentovi při načítání reklam nebo přístupu na jejich webové stránky. Inzerenti mohou tyto soubory cookie použít k vytvoření historie procházení uživatele na všech webových stránkách obsahujících jejich reklamy.
V roce 2014 existovalo několik webových stránek, které nastavovaly soubory cookie, které bylo možné číst více než 100 doménami třetích stran. V průměru bude mít webová stránka nastaveno asi 10 souborů cookie, přičemž maximální počet souborů cookie je vyšší než 800.
Supercookie
Supercookie je soubor cookie pocházející z domény nejvyšší úrovně, jako je .com, nebo veřejná přípona, jako je .co.uk. Je důležité, aby byly supercookies blokovány prohlížeči kvůli některým bezpečnostním problémům. Pokud dojde k odblokování, může útočník ovládající škodlivý web nastavit supercookie, aby se mohl vydávat za požadavky uživatelů a odesílat požadavky na jiné weby sdílející stejnou doménu nejvyšší úrovně nebo veřejnou příponu. Například supercookie pocházející z domény .com by mohl poškodit požadavky na example.com, i když soubor cookie nepocházel z example.com. Lze jej zneužít k falešným přihlášením nebo změně uživatelských informací.
Zombie sušenky
Zombie cookies jsou cookies, které se automaticky znovu vytvoří poté, co je uživatel smaže. To se provádí skriptem, který ukládá obsah souboru cookie na jiné místo, jako je úložiště obsahu Flash, úložiště HTML5 nebo jiný mechanismus na straně klienta.
2.3. Struktura souborů cookie
Soubor cookie o velikosti 4 kB obsahuje 7 hlavních součástí:
- název
- Hodnota
- Vyprší (datum vypršení platnosti)
- Cesta (cesta k platnému souboru cookie, „/“ znamená, že soubor cookie je platný na jakékoli cestě)
- Doména
- Zajistit
- Pouze HTTP
První dvě složky (název a hodnota) jsou povinné.
2.4. Použití
Správa relace
Soubory cookie lze použít k udržování údajů souvisejících s uživatelem při více návštěvách webových stránek. Soubory cookie jsou řešením pro vytvoření nákupního košíku, virtuálního nákupního košíku, který uživatelům pomáhá ukládat položky, které si vyberou při procházení produktů.
Současné aplikace nákupních košíků často ukládají seznam položek v košíku do databáze na straně serveru, místo aby jej ukládaly do souboru cookie na straně klienta. Webový server normálně odešle cookie obsahující identifikátor relace – ID relace (které je jedinečné). Webový prohlížeč vrátí toto ID relace s každým uživatelským nákupním požadavkem.
Umožnění uživatelům přihlásit se na webové stránky je další aplikací souborů cookie. Normálně při prvním přihlášení webový server odešle klientovi cookie obsahující ID relace. Uživatelé odešlou své informace a webová aplikace ověří relaci a poté umožní uživateli používat její služby.
Soubory cookie poskytují rychlý a pohodlný mechanismus interakce klient/server. Jednou z výhod souborů cookie je, že ukládají informace o uživateli do souboru umístěného v počítači uživatele. To výrazně snižuje úložný prostor serveru a dobu zpracování.
Personalizované
Soubory cookie lze použít k zapamatování osobních údajů uživatele, když navštíví webovou stránku, k zobrazení relevantnějšího obsahu tomuto uživateli pokaždé, když web znovu navštíví.
Výrazným příkladem je funkce doporučení knih na webu amazon.com. Když uživatel klikne na knihu, Amazon mu navrhne další knihy, které by si měl uživatel prohlédnout. Tyto návrhy jsou založeny na tom, které knihy si uživatelé dříve prohlíželi a které knihy se rozhodli zakoupit.
Dalším příkladem je funkce návrhů vyhledávání ve Vyhledávání Google. Když se přihlásíte pomocí svého osobního účtu a provedete vyhledávání, Google bude poskytovat návrhy „jen pro vás“ a požadované výsledky se vždy zobrazí na začátku seznamu.
Monitor
Sledovací soubory cookie lze použít ke sledování historie procházení uživatele. To lze také provést pomocí adresy IP počítače, který odesílá požadavek na webovou stránku, nebo se spoléhat na pole Referrer v záhlaví požadavku HTTP, ale soubory cookie poskytují větší přesnost. To se provádí následovně:
- Pokud uživatel navštíví webovou stránku, ale tento požadavek neobsahuje soubor cookie, server bude předpokládat, že toto je první návštěva uživatele na této webové stránce; Server vygeneruje náhodný řetězec a odešle jej jako cookie zpět do prohlížeče spolu s požadovanou webovou stránkou.
- Od tohoto okamžiku bude prohlížeč cookie automaticky odesílat na server pokaždé, když je požadována nová webová stránka na této webové stránce, server vrátí požadovanou webovou stránku jako obvykle, ale s adresou URL této webové stránky a Přístup bude uložen do souboru protokolu. Analýzou informací uložených v tomto souboru protokolu bude odhalena historie prohlížení, často navštěvované webové stránky a zvyky při prohlížení.
2.5. Rozvinutí

Cookies jsou data odesílaná ze serveru do prohlížeče. Prohlížeč jej poté odešle zpět na server, aniž by změnil obsah uvnitř, pokaždé, když uživatel odešle požadavek na webovou stránku. Soubory cookie lze nastavit také skriptovacím jazykem, jako je Javascript.
Každý webový prohlížeč může uložit minimálně 300 cookies do 4KB souboru a minimálně 20 cookies na server nebo doménu.
Nastavte soubory cookie
Webový server a prohlížeč spolu komunikují prostřednictvím HTTP (HyperText Transfer Protocol). Například pro přístup na stránku http://www.example.org/index.html se prohlížeč připojí k serveru odesláním požadavku HTTP, jako je tento:

Server odpoví zasláním jednoduchého textového paketu prohlížeči, který se nazývá HTTP odpověď. Tento paket může obsahovat řádek obsahující obsah souboru cookie:

Set-Cookie je pole, které dává prohlížeči pokyn, aby soubor cookie uložil a odeslal jej na server v budoucnu pokaždé, když na server dojde k požadavku (pokud cookie stále vypršela). Prohlížeč například odešle požadavek na adresu http://www.example.org/spec.html odesláním požadavku HTTP takto:

Toto je požadavek na jinou stránku patřící ke stejnému serveru. V tomto případě server pochopí, že tento požadavek souvisí s předchozím požadavkem, a odpoví odesláním požadované webové stránky do prohlížeče, případně přidáním dalších hodnot cookie.
Hodnotu cookie může server upravit odesláním pole Set-Cookie: název=hodnota v HTTP odpovědi do prohlížeče. Prohlížeč poté nahradí starou hodnotu souboru cookie touto novou hodnotou.
Hodnota cookie může obsahovat jakýkoli tisknutelný znak ASCII kromě „,“, „;“ a bílé místo. Názvy souborů cookie také nemohou obsahovat znak '=', protože to je znak, který odděluje název a hodnotu.
Termín drobenka se někdy používá k označení dvojice název-hodnota souboru cookie.
Soubory cookie mohou být také nastaveny pomocí Javascriptu nebo podobného skriptovacího jazyka. V Javascriptu se k nastavení cookies používá objekt document.cookie. Atribut HttpOnly je zodpovědný za zabránění špatným skriptům ve čtení obsahu cookie.
Vlastnosti souborů cookie
Kromě dvojice název-hodnota může server nastavit také řadu dalších vlastností cookie: Domain, Path, Expirse, Max-Age, Secure a HttpOnly. Prohlížeč tyto atributy nepošle serveru, pouze odešle pár název-hodnota. Tyto atributy používá prohlížeč k určení, kdy smazat soubory cookie, zablokovat soubory cookie nebo odeslat soubory cookie na server.
Doména a cesta
Doména a cesta určují rozsah souboru cookie. Umožňují prohlížeči určit, kdy má odeslat soubory cookie na server. Pokud není zadán, použijí výchozí doménu a cestu požadovaného objektu. Existuje však rozdíl mezi souborem cookie pro foo.com bez atributu domain a souborem cookie s atributem domain foo.com. V prvním případě bude soubor cookie odeslán pouze v případě požadavku na foo.com. V druhém případě bude soubor cookie odeslán do všech subdomén foo.com. Následuje příklad direktivy Set-Cookie z webové stránky po přihlášení uživatele, z požadavku na docs.foo.com:

První LSID souboru cookie nemá atribut domény a má cestu /accounts. Prohlížeč odešle soubory cookie pouze tehdy, když je požadovaná stránka obsažena na docs.foo.com/accounts. Zbývající dva soubory cookie, HSID a SSID, jsou odeslány zpět na server, pokud existuje požadavek na jakoukoli subdoménu foo.com.
Cookies lze také nastavit pouze pro top doménu a její subdomény. Nastavení cookies na www.foo.com z www.bar.com nebude z bezpečnostních důvodů povoleno.
Vyprší a Max-Age
Atribut Expires říká prohlížeči, kdy má soubor cookie smazat. Datum v Expires vypadá takto: „Wdy, DD Mon YYYY HH:MM:SS GMT“. Max-Age se také používá k označení data vypršení platnosti souboru cookie. Podívejme se na následující příklad:

Platnost prvního souboru cookie je nastavena na 15. ledna 2013 a prohlížeč jej použije po uplynutí této doby. Platnost druhého souboru cookie made_write_conn nevyprší a používá se jako soubor cookie relace, bude smazán po vypnutí prohlížeče. Třetí cookie reg_fb_gate, má datum vypršení platnosti v minulosti, bude okamžitě smazáno.
Zabezpečené a pouze HTTP
Vlastnosti Secure a HttpOnly jsou null, místo toho jejich přítomnost znamená, že jsou použity báze Secure a HttpOnly.
Atribut Secure udržuje přenos souborů cookie v rámci šifrovaného připojení. Pokud webový server nastaví cookie s atributem secure z nezabezpečeného připojení, může být cookie stále zachycena útokem typu man-in-the-middle.
Atribut HttpOnly dává prohlížeči pokyn, aby nevystavoval soubory cookie prostřednictvím jiného připojení než HTTP (nebo HTTPS), jako je Javascript, a proto ztěžuje získávání souborů cookie zneužíváním chyb zabezpečení Cross-Site Scripting (XSS).
3. Některé bezpečnostní problémy při používání cookies
Pokud webová stránka používá ID relace k identifikaci relace uživatele, útočník by mohl ukrást soubor cookie a vydávat se za uživatele. Zde jsou některé běžné scénáře krádeže souborů cookie:
Odposlechy

Provoz v síti může zachytit a přečíst třetí strana (jiná než příjemce a odesílatel). Tento provoz zahrnuje soubory cookie. Pokud přenos není zašifrován, může útočník číst citlivé informace obsažené v cookie. A s využitím těchto informací se útočníci budou vydávat za uživatele, aby provedli nebezpečné akce, jako jsou bankovní transakce.
Tento problém lze vyřešit použitím zabezpečeného protokolu mezi počítačem uživatele a serverem – protokolem HTTPS. Server může při nastavování cookies použít příznak Secure. Soubor cookie pak bude odeslán pouze přes šifrovaný kanál, jako je připojení SSL.
Skriptování napříč weby

Skriptovací jazyky, jako je Javascript, mohou číst hodnoty souborů cookie a odesílat je na libovolné servery.
Předpokládejme, že web má chybu skriptování mezi weby, hackeři mohou vložit škodlivý kód, například následující:

Když oběť klikne na výše uvedený odkaz, prohlížeč spustí skript v atributu onclick: odešle cookie oběti na server attacker.com.
Cross-site scripting je jednou z běžných zranitelností webových stránek (v roce 2013 se umístil na třetím místě v top 10 nejčastějších zranitelnosti – podle OWASP).
Riziko této chyby zabezpečení lze omezit nastavením příznaku HttpOnly pro soubory cookie. V té době nebudou soubory cookie přístupné skriptovacím jazykům.
Falšování požadavků napříč weby
CSRF (Cross-site request forgery) neboli útok jedním kliknutím je metoda zneužívání zranitelnosti webových stránek, kdy oběti – uživatelé, kteří jsou autorizováni webem bez jejich vědomí, provádějí neoprávněné příkazy.
CSRF přiměje prohlížeč oběti k odesílání požadavků http webovým aplikacím. V případě, že relace oběti nevypršela, budou výše uvedené požadavky podány s autentizačními právy oběti.
Oběť Bob například provádí transakci na webu určité banky X. Fred je útočník, ten chlap ví, jak funguje web banky X, když chce převést peníze z účtu A na účet B následovně:
http://banka.example.com/vybrat?account=accountA&amount=100&for=accountB
Pošle Bobovi škodlivou zprávu.
Pokud banka X uloží informace o ověření uživatele do souboru cookie a Bob klikne na výše uvedený odkaz, Bobovy peníze budou převedeny Fredovi.
Pro omezení tohoto rizika lze pro soubory cookie nastavit parametry Expires.
4. Závěr
Soubory cookie se dnes používají ve většině webových aplikací. Obsahuje také potenciální rizika, která výrazně ovlivňují uživatele. Na straně vývojáře proto musíme cookies jasně rozumět a vědět, jak nastavit potřebné parametry, aby aplikace mohla být bezpečnější proti útokům hackerů.