Osobní stránky

Cookie nenahrazují session

Session jsou ve většině případů malé kousky dat, která si potřebujeme uložit o uživatelích našeho systému. Běžně se session ukládají na serveru do souboru nebo do databáze. Z výkonostních důvodů je ale někteří programátoři ukládají přímo do cookie. Cookie by měli sloužit k identifikaci uživatele, abychom mohli obejít bezstavovost HTTP protokolu. Do cookie se doporučuje ukládat pouze identifikátor k dané session. Cookie jsou rychleji přístupné, než získávání session ze souboru nebo z databáze, protože jsou přímo součástí HTTP požadavku.

Druhou výhodou ukládání session do cookie kromě výkonu je, že tato data mohou být přístupná z jakéhokoliv programovacího jazyka. Osobně jsem se ale nikdy nesetkal s nutností přistupovat k session z rozdílných programovacích jazyků. Podle mého názoru se ale tyto případy dají obejít exlegantnějším způsobem.

Ukládání session do cookie má ale i několik nevýhod, kvůli kterým se tento přístup nedoporučuje používat.

Pokud ukládáte session do cookie, všechna takto uložená data budou přístupná návštěvníkům vašich stránek a především hackerům. Cookie se ukládají do souborů na počítač návštěvníka. Mimo to, že data budou všem přístupná, je tedy bude možné libovolně upravovat a manipulovat s nimi. Musíte tedy zajistit, aby tato data nemohla být změněna, moho by se totiž stát,  že by si uživatelé mohli měnit práva nebo navyšovat skóre.

Zašifrování všech dat v cookie by se na první pohled mohlo zdát, jako řešení tohoto problému. Návštěvnící sice budou mít přístup k datům z cookie, ale nebudou schopni rozeznat a měnit jejich obsah. Toto řešení má ale jeden problém. Útočníci mají stále přístup k těmto datům a tak jednoduše mohou data uložená v cookie přeněst na jiný počítač, pokud je například odposlechnou z HTTP požadavku. V těchto datech může být uložena informace u úspěšném přihlášení. Data tedy nemusí být ani rozšifrována a mohou být použita ve stejné formě na jiném počítači. Takovémuto zneužití se říká Reply attack.

Řešení proti zranitelnosti Reply attack existuje, a to zajistit, aby byla data použitelná pouze jednou a poté se již nedala nikdy znovu použít. Abyste tedy mohli kontrolovat, zda již data byla použita, musíte si ukládat tyto informace do souboru nebo do databáze. Tím ovšem příjdete o výkonostní výhody ukládání session do cookie a je tedy lepší ukládat celý obsah session přímo na serveru.

Další neýhodou je velikostní omezení cookie. Můžete do nich uložit pouze 4KB dat, což se na první pohled zdá jako dostačující, ale při použití šifrování objem dat velmi rychle naroste a můžete tak tento limit rychle vyčerpat.

Pro ukládání session se tedy kvůli těmto důvodům doporučuje ukládat do cookie pouze identifikátor k datům a samotná data ukládat do souboru na serveru nebo do databáze, aby nebyla přístupná návštěvníkům vašich stránek.

Jakub Škvára


Jakub je cestovatel, blogger a webový vývojář. Zajímá se především o technické novinky a rád navštěvuje konference. Používá: Symfony2 Framework, AngularJS, NodeJS, MongoDB a další moderní technologie. Aktuálně žije v Londýně.