kukiTakéHTTP cookie, web cookie, cookiesZákladní

Definice

Cookie je malý údaj, který web uloží v prohlížeči a prohlížeč jej při dalších požadavcích posílá zpět příslušnému webu. Používá se pro přihlášení, nastavení, košík, analytiku i reklamu. Bezpečné použití závisí na atributech jako Secure, HttpOnly, SameSite, expirace a správném souhlasu uživatele.

Kategorie: Webové technologieAktualizováno

Než se na to spolehnete: Právní část je záměrně obecná, protože konkrétní povinnosti se liší podle účelu cookie, jurisdikce a aktuálního výkladu dozorových orgánů.

HTTP je bezstavový protokol: každý požadavek na stránku nebo API může vypadat jako úplně nová návštěva. Cookie přidává prohlížeči malou paměť, kterou server později dostane zpět. Typicky nejde o samotný účet nebo košík, ale o identifikátor, podle kterého server najde stav uložený u sebe.

Cookie se proto používá pro přihlášení, jazyk webu, obsah nákupního košíku, ochranu proti podvrženým požadavkům nebo měření návštěvnosti. Stejný mechanismus ale může sledovat uživatele napříč weby, proto má cookie i právní a bezpečnostní rozměr.

Co se posílá v hlavičkách

Server nastavuje cookie odpovědí s hlavičkou Set-Cookie. Prohlížeč si hodnotu uloží a při dalších vhodných požadavcích posílá hlavičku Cookie. Server obvykle nastaví název a hodnotu, například session_id=abc123, a doplní atributy určující dosah, životnost a bezpečnostní pravidla.

JavaScript může některé cookie číst a zapisovat přes document.cookie, ale pouze pokud tomu nebrání atributy a pravidla prohlížeče. Moderní aplikace často nastavují citlivé relační cookie výhradně na serveru, aby je skripty na stránce vůbec neviděly.

Relační cookie bez pevné expirace většinou končí po zavření relace prohlížeče. Perzistentní cookie má Expires nebo Max-Age a může přežít restart prohlížeče. Atributy Domain a Path určují, pro které hostitele a cesty se cookie přikládá k požadavku.

Příliš široký dosah zvyšuje riziko úniku nebo nechtěného sdílení mezi částmi webu. Přesnější nastavení domény a cesty omezuje, kam se identifikátor dostane, a usnadňuje oddělení administrace, e-shopu a veřejné části webu.

Bezpečnostní atributy v praxi

Atribut Secure říká prohlížeči, aby cookie posílal jen přes HTTPS. Atribut HttpOnly brání přístupu z JavaScriptu a snižuje dopad útoku XSS na session token. Atribut SameSite omezuje přikládání cookie k požadavkům vyvolaným z jiného webu, což pomáhá proti CSRF.

Cookie není trezor. Hodnota může být zachycena při špatné konfiguraci, zkopírována z napadeného zařízení nebo zneužita, pokud server neověřuje její platnost. Citlivý stav proto patří na server a cookie má nést jen minimum nutných údajů.

Souhlas, analytika a třetí strany

Technicky nezbytné cookie, například pro přihlášení nebo bezpečnost košíku, mají jiné postavení než marketingové a analytické cookie. Evropská pravidla obvykle vyžadují informování a u netechnických účelů také platný souhlas před uložením nebo čtením.

Third-party cookie pochází z domény jiné než navštívený web, například z reklamní nebo měřicí služby. Prohlížeče takové cookie stále více omezují, protože umožňují sledování napříč různými weby. Vývojáři proto častěji používají serverové měření, first-party integrace a přísnější práci se souhlasem.

Příklady z praxe

  1. Přihlášení bez ukládání hesla v prohlížeči

    Uživatel se přihlásí do administrace a server po úspěšném ověření pošle cookie s náhodným identifikátorem relace. Prohlížeč ji bude posílat jen přes HTTPS, skripty na stránce ji nepřečtou a při běžné navigaci zůstane přihlášení funkční. Server podle identifikátoru dohledá relaci ve vlastní databázi nebo cache.

    HTTP/1.1 200 OK
    Set-Cookie: session_id=abc123; Path=/; Secure; HttpOnly; SameSite=Lax
  2. Zapamatování tmavého režimu

    Návštěvník si přepne web do tmavého režimu a stránka uloží volbu do cookie. Při další návštěvě prohlížeč cookie pošle a server může vykreslit správné téma už v prvním HTML. Hodnota není citlivá, takže čtení z JavaScriptu dává smysl.

    document.cookie = "theme=dark; Max-Age=31536000; Path=/; SameSite=Lax";

Časté omyly

MýtusCookie je malý program, který běží v počítači.
Ve skutečnostiCookie je textová hodnota uložená prohlížečem podle pravidel webu. Cookie se sama nespouští a neobsahuje kód, ale může nést identifikátor, který server použije k rozhodnutí.
MýtusDo cookie si můžu bezpečně uložit heslo, když web používá HTTPS.
Ve skutečnostiHTTPS chrání přenos, ne vhodnost obsahu cookie. Heslo ani dlouhodobě použitelný tajný údaj do cookie nepatří, bezpečnější je náhodný relační identifikátor a stav uložený na serveru.
MýtusCookie banner je povinný úplně pro každou cookie.
Ve skutečnostiTechnicky nezbytné cookie mohou mít jiné právní zacházení než analytické nebo marketingové cookie. Povinnost souhlasu závisí hlavně na účelu a místních pravidlech, ne jen na tom, že se použije technologie cookie.

Časté dotazy

Proč cookie nezaručuje, že uživatel je pořád přihlášený?
Cookie s relačním identifikátorem pouze pomáhá serveru poznat navazující požadavky. Server může relaci zneplatnit po odhlášení, po vypršení času, při změně hesla nebo při podezřelé aktivitě. Prohlížeč může cookie stále posílat, ale server ji už nemusí přijmout. Bez kontroly na serveru by ukradená nebo stará cookie představovala vážné bezpečnostní riziko.
Kdy má cookie používat HttpOnly?
Atribut HttpOnly má smysl u cookie, která nese session ID, obnovovací token nebo jinou hodnotu použitelnou k převzetí účtu. JavaScript potom cookie nepřečte přes document.cookie, takže útok XSS má menší šanci ukrást přihlašovací údaj. HttpOnly ale neodstraní samotnou zranitelnost XSS a nebrání tomu, aby škodlivý skript odesílal požadavky jménem uživatele.
Proč prohlížeče omezují third-party cookie?
Third-party cookie umožňuje cizí doméně rozpoznat stejný prohlížeč na více různých webech. Reklamní a měřicí systémy tím mohou sestavovat profil návštěvníka bez přímého vztahu k navštívené stránce. Prohlížeče proto third-party cookie blokují nebo omezují a weby přecházejí na first-party měření, agregovaná data nebo mechanismy vyžadující jasnější souhlas.
Stačí smazat cookie k odhlášení uživatele?
Smazání cookie v prohlížeči obvykle odstraní lokální důkaz relace, takže další požadavek už nepůjde spojit s přihlášeným uživatelem. Bezpečné odhlášení ale má zároveň zneplatnit relaci na serveru. Pokud server ponechá token aktivní, kopie cookie z jiného zařízení nebo z úniku může dál fungovat až do expirace nebo ručního zrušení.

Zdroje

  1. HTTP State Management Mechanism(otevře se v novém okně)RFC Editor, 2011
  2. Using HTTP cookies(otevře se v novém okně)MDN Web Docs
  3. Set-Cookie header(otevře se v novém okně)MDN Web Docs
  4. Document: cookie property(otevře se v novém okně)MDN Web Docs

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.