Co je CSRF a jak před ním chránit aplikaci

Autor: Zveřejněno

Ve zkratce: CSRF je útok, při kterém cizí stránka přiměje prohlížeč přihlášeného uživatele odeslat nechtěný požadavek na jiný web. Pokud web ověřuje pouze to, zda je uživatel přihlášený, může provést operaci bez jeho vědomého souhlasu. Základem ochrany jsou opatření na straně aplikace: tokeny CSRF, správné nastavení cookies a kontrola původu požadavků.

Jak CSRF funguje — příklad s administrací e-shopu

CSRF je zkratka pro Cross-Site Request Forgery, tedy podvržení požadavků mezi weby. Útok využívá toho, že prohlížeč může k požadavkům směřujícím na daný web automaticky připojovat relační cookie. Díky této cookie server rozpozná přihlášeného uživatele, aniž by znovu vyžadoval heslo.

Představte si, že spravujete e-shop a máte otevřenou administraci. Na druhé kartě navštívíte stránku připravenou útočníkem. Tato stránka se pokusí do administrace odeslat požadavek na změnu e-mailové adresy přiřazené k vašemu účtu.

Pokud prohlížeč připojí relační cookie a administrace navíc neověří pravost požadavku, server jej může považovat za vaše rozhodnutí. Útočník nemusí znát heslo ani přečíst cookie — stačí, že ji prohlížeč použije při odesílání požadavku.

Je to podobné, jako kdyby někdo předložil k provedení pokyn s vaším automaticky připojeným razítkem. Systém razítko rozpozná, ale neověří, zda tuto konkrétní operaci skutečně chcete provést.

Kdy může útok uspět a co mu nezabrání

Typický útok CSRF vyžaduje několik podmínek: uživatel má aktivní relaci, prohlížeč automaticky odesílá autentizační údaje a aplikace přijímá předvídatelný požadavek, který mění stav účtu. Může jít o změnu údajů, přidání uživatele nebo smazání záznamu. Důsledky závisí na dostupných operacích a oprávněních oběti.

Útočník obvykle nepotřebuje přečíst odpověď serveru. Prohlížeč může cizí stránce zakázat čtení dat z administrace, ale samotné odeslání některých požadavků je stále možné. Proto zásada stejného původu, která omezuje přístup skriptů k cizím prostředkům, nenahrazuje ochranu před CSRF.

Ani HTTPS tento problém neřeší. Šifruje spojení a chrání přenášená data, ale nepotvrzuje, že uživatel operaci vědomě zadal. Nestačí ani samotné použití metody POST namísto GET: cizí stránka může odeslat běžný formulář metodou POST.

CSRF není totéž co XSS. Při XSS se nežádoucí kód spouští v kontextu důvěryhodného webu, zatímco CSRF zneužívá důvěru webu v požadavky z uživatelova prohlížeče. Zranitelnost XSS však může narušit ochranu před CSRF, například tím, že umožní přečíst token.

Jak zabezpečit aplikaci proti CSRF

Nejbezpečnějším výchozím bodem je vestavěná ochrana používaného frameworku. Je třeba ji zapnout a ověřit, že pokrývá všechny operace měnící data, nejen přihlašovací formulář.

U zvlášť citlivých úkonů přidejte opětovné ověření totožnosti nebo samostatné potvrzení. Relační cookies by také měly mít vhodně nastavené atributy Secure a HttpOnly, přestože ani jeden z nich sám o sobě CSRF nezabrání.

Potřebuje ochranu také API?

API, tedy rozhraní pro komunikaci mezi programy, může být rovněž zranitelné vůči CSRF, pokud používá relaci ověřovanou pomocí cookie. Samotná odpověď ve formátu JSON bezpečnost nezajišťuje.

Pokud klient výslovně přidává přístupový token do hlavičky Authorization a prohlížeč jej nepřipojuje automaticky, typický mechanismus CSRF se obvykle neuplatní. To však neznamená odolnost vůči krádeži tokenu nebo XSS. Ani CORS, tedy mechanismus upravující přístup mezi různými původy, není samostatnou ochranou před CSRF.

Co zkontrolovat na vlastním webu

Začněte jednou operací, například změnou e-mailové adresy. Na testovacím účtu, ve vlastním prostředí nebo se souhlasem vlastníka ověřte, zda je požadavek bez tokenu CSRF nebo s chybným tokenem odmítnut a skutečně nezmění data. Poté zkontrolujte nastavení cookie a ostatní cesty, kterými lze stejnou operaci provést.

Pokud používáte hotový systém, ověřte způsob fungování ochrany v oficiální dokumentaci k jeho verzi a nainstalovaným rozšířením. Jako uživatel chybějící zabezpečení serveru nenapravíte; riziko můžete omezit tím, že se po práci v administraci s citlivými údaji odhlásíte. Jako vlastník aplikace začněte revizí operací měnících data — právě u nich je nutné ověřovat, zda požadavek skutečně pochází z oprávněného rozhraní.

Přečtěte si také

Zjistěte, jak PHP-FPM zpracovává požadavky PHP, čím se liší od webového serveru a jak nastavit procesy podle provozu a zdrojů hostingu.
Poznejte BIND, otevřený software pro server DNS: jak spravuje domény, jaké role plní a kdy se vyplatí provozovat vlastní server.
Zjistěte, k čemu slouží polský registr a číslo REGON, jak se liší od NIP a KRS a jak v oficiálním registru ověřit údaje o firmě.