Hlavní obsah

Zavřete prohlížeč a web vás pořád zná. Cookie není heslo, ale často drží doklad o přihlášené relaci

Foto: Pexels

Web si nemusí znovu říkat o heslo při každém kliknutí. Po přihlášení pracuje se session ID či tokenem a prohlížeč ho může uchovat i po restartu.

Článek

Přihlásíte se do e-shopu, zavřete kartu, vypnete celý prohlížeč a o pár hodin později se vrátíte. Web vás někdy přivítá rovnou vaším jménem. Žádné nové heslo, žádný e-mail, žádný kód. Vypadá to, jako by si stránka heslo někde tajně schovala.

Ve většině běžných webových aplikací je princip jiný. Heslo se používá k ověření identity. Jakmile server uvěří, že jste opravdu vy, vytvoří přihlášenou relaci a pro další požadavky už nepotřebuje znovu přenášet heslo. Potřebuje poznat, že další požadavek patří ke stejné ověřené relaci.

HTTP samo o sobě paměť nemá

Základ webu je překvapivě zapomnětlivý. Jednotlivé HTTP požadavky jsou z principu samostatné. Když prohlížeč požádá o stránku profilu a o vteřinu později o seznam objednávek, server potřebuje mechanismus, který obě návštěvy spojí se stejným uživatelem.

Typickým řešením je session ID nebo jiný token. Server vytvoří identifikátor relace a prohlížeč ho pak posílá s dalšími požadavky. OWASP upozorňuje, že po úspěšném přihlášení má session ID z bezpečnostního hlediska velkou hodnotu: dočasně zastupuje výsledek autentizace. Není to vaše heslo, ale říká serveru, že tento prohlížeč už ověřením prošel.

Cookie je obálka, ne nutně celý obsah účtu

Nejběžnější způsob, jak si prohlížeč session identifikátor uchová, je cookie. Cookie je malý údaj uložený pro konkrétní web. Může obsahovat identifikátor relace, preference nebo jiná data podle toho, jak je služba navržená.

U serverové session přitom cookie typicky nemusí obsahovat vaše jméno, adresu ani heslo. Může v ní být jen neprůhledný náhodný identifikátor. Skutečné informace o tom, ke kterému účtu relace patří a jaká má oprávnění, si drží server. Existují i jiné architektury, například podepsané tokeny, ale základní myšlenka je podobná: pro každý klik se znovu neposílá heslo.

Proč někdy přihlášení přežije zavření prohlížeče

Cookie může být dočasná nebo perzistentní. Pokud server u cookie nastaví dobu platnosti pomocí Expires nebo Max-Age, prohlížeč ji může uchovat na disku a poslat znovu i po restartu. Právě tak může vzniknout známý efekt „zavřel jsem prohlížeč a pořád jsem přihlášený“.

MDN zároveň upozorňuje na důležitou komplikaci: ani takzvaná session cookie nemusí v praxi vždy zmizet přesně ve chvíli, kdy uživatel zavře okno. Moderní prohlížeče umějí obnovovat předchozí relaci a chování se může lišit. Bezpečnost proto nemá stát jen na předpokladu „uživatel určitě zavře prohlížeč“.

„Zapamatovat si mě“ není jedno univerzální tlačítko

Když web nabízí volbu „zůstat přihlášen“, může tím prodloužit životnost cookie nebo použít zvláštní dlouhodobý token, který umožní relaci bezpečně obnovit. Konkrétní implementace se službu od služby liší. Nelze tedy poctivě říct, že každé takové políčko dělá technicky úplně totéž.

Naopak některé citlivé služby nastavují krátkou životnost relace, vyžadují opětovné ověření při důležitých akcích nebo uživatele po delší neaktivitě odhlásí. Je to kompromis mezi pohodlím a bezpečností: čím déle relace žije, tím déle existuje i možnost jejího zneužití, pokud by se identifikátor dostal k někomu cizímu.

Odhlášení by mělo znamenat víc než jen schovat tlačítko

Když kliknete na „Odhlásit“, správně navržená aplikace nemá jen přesměrovat stránku na úvod. Server má relaci zneplatnit nebo jinak ukončit její platnost a prohlížeč má přestat posílat použitelný přihlašovací údaj. OWASP výslovně upozorňuje, že samotné smazání cookie na straně prohlížeče nestačí, pokud by na serveru dál žila zkopírovaná platná session.

To je také důvod, proč bezpečnostní návody doporučují u citlivých session cookies atributy jako Secure a HttpOnly. Secure omezuje odesílání na HTTPS a HttpOnly brání běžnému JavaScriptu v přístupu k hodnotě cookie. Další ochrany řeší například posílání cookies mezi weby.

Takže web po restartu nezná vaše heslo. Pozná vaši stále platnou relaci

Pro uživatele to celé vypadá kouzelně: zavřít, otevřít, a účet je pořád připravený. Ve skutečnosti se heslo často odehrálo jen na začátku. Potom nastoupil identifikátor relace, který prohlížeč podle pravidel služby uchovává a posílá serveru.

Cookie tedy není synonymum pro heslo ani automaticky seznam všeho, co o vás web ví. Je to jeden z mechanismů, kterým si dvě strany připomínají kontext předchozí komunikace. A právě díky tomu nemusíme při každém kliknutí znovu dokazovat, kdo jsme.

Zdroje

Máte na tohle téma jiný názor? Napište o něm vlastní článek.

Texty jsou tvořeny uživateli a nepodléhají procesu korektury. Pokud najdete chybu nebo nepřesnost, prosíme, pošlete nám ji na medium.chyby@firma.seznam.cz.

Sdílejte s lidmi své příběhy

Stačí mít účet na Seznamu a můžete začít publikovat svůj obsah. To nejlepší se může zobrazit i na hlavní stránce Seznam.cz