Slovník pojmů

CSRF

CSRF zneužívá důvěru aplikace v přihlášenou cookie relaci. Ochrana ověřuje, že požadavek na změnu skutečně vznikl v oprávněné aplikaci, ne jen v prohlížeči uživatele.

Stručná definice

Cookie potvrzuje relaci, ne původ úmyslu uživatele.

Při CSRF útočník nepotřebuje znát heslo ani číst obsah administrace. Stačí, že oběť je v cílové aplikaci přihlášená a navštíví škodlivý web. Ten může například odeslat formulář na endpoint pro změnu e-mailu, zrušení objednávky nebo založení nového uživatele. Prohlížeč v některých situacích k požadavku automaticky přiloží cookie cílové aplikace.

Cílová aplikace proto u mutujících požadavků ověřuje další důkaz původu: nejčastěji CSRF token předaný ve formuláři či hlavičce, případně konzistentní Origin nebo Referer podle návrhu aplikace. Token není náhradou přihlášení a autorizace. Doplňuje je o otázku, zda požadavek vznikl v očekávaném uživatelském rozhraní.

Kde se používá

Každá cookie relace s akcemi měnícími stav

CSRF ochrana patří především do webového UI, které používá relaci založenou na cookies.

  • HTML formuláře v administraci e-shopu a interních systémů
  • změna hesla, e-mailu, role, adresy, platebního nastavení nebo přístupových údajů
  • POST, PUT, PATCH a DELETE endpointy volané přihlášeným browser klientem
  • AJAX požadavky, které nesou session cookie a mění data na serveru
  • přihlášení a odhlášení, pokud jejich tok a riziko vyžadují ochranu před login CSRF

Praktický příklad

Zrušení objednávky z administrace

Obsluha otevře detail objednávky a server spolu s formulářem vytvoří CSRF token pro akci zrušení. Při odeslání aplikace zkontroluje přihlášenou relaci, token a současně oprávnění uživatele měnit objednávku dané organizace. Teprve potom provede businessovou změnu v transakci.

Útočníkův web umí vytvořit obyčejný HTML formulář, ale nezná token svázaný s relací obsluhy. Při chybě tokenu se nic nemění a aplikace vrátí bezpečnou chybovou odpověď. CSRF token se nevkládá do URL ani do logů; není to credential pro volání API z libovolného klienta.

<form method="post" action="/orders/4812/cancel">
  <input type="hidden" name="_token"
         value="{serverem-vygenerovaný-token-pro-akci-cancel-order}">
  <button type="submit">Zrušit objednávku</button>
</form>

Jak funguje

Od zobrazení formuláře po bezpečné provedení změny

Ochrana přidává k automaticky zaslané relaci hodnotu, kterou cizí origin běžně nemůže získat.

  1. Uživatel otevře stránku Aplikace ověří session a vytvoří nebo načte token určený pro uživatele, relaci či konkrétní zamýšlenou akci.
  2. Formulář nebo JavaScript nese token Token se vloží do skrytého formulářového pole nebo do očekávané request hlavičky, nikoli do URL.
  3. Prohlížeč odešle požadavek K požadavku se může přiložit session cookie. Token poskytuje dodatečný důkaz, že požadavek připravil důvěryhodný klient.
  4. Server porovná hodnotu Middleware nebo bezpečnostní vrstva ověří token ještě před změnou dat; selhání vede k odmítnutí bez vedlejšího efektu.
  5. Aplikace autorizuje akci Po CSRF kontrole se stále ověřuje role, tenant, vlastnictví zdroje a business pravidlo. Token nepřidává oprávnění.

Důležité pojmy

Token, cookie a původ požadavku mají odlišnou roli.

Spolehlivá ochrana nevybírá jeden název hlavičky, ale navrhuje tok pro konkrétní druh klienta a relace.

Synchronizer token

Server uloží či odvodí token vázaný na relaci a druhou kopii předá do formuláře. Při mutaci musí hodnoty odpovídat. Token se generuje kryptograficky náhodně a kontroluje se na serveru.

Double-submit cookie

Jiný vzor porovnává hodnotu v cookie a v requestu. Aby útočník nemohl obě hodnoty libovolně nastavit, potřebuje promyšlené vazby, bezpečné nastavení cookie a správně zvolený důvěryhodný kontext.

SameSite cookie

SameSite omezuje, kdy prohlížeč cookie přiloží při cross-site kontextu. Je užitečná obranná vrstva, ale závisí na režimu, navigaci a potřebách legitimního přihlášení; není jedinou CSRF obranou.

Origin a Referer

Kontrola očekávaného Originu či bezpečného Refereru může odhalit cizí původ mutace. Slouží jako doplněk či podle architektury alternativa, ale musí počítat s proxy a dokumentovaným chováním prohlížeče.

Bezpečné metody

GET, HEAD a další read-only operace nemají měnit business stav. CSRF token neospravedlňuje použití GET pro zrušení objednávky nebo změnu hesla.

Vztah k jiným ochranám

CSRF, CORS, XSS a autorizace řeší různé otázky.

Záměna těchto pojmů vede k endpointu, který sice projde jednou kontrolou, ale zůstane zranitelný jinou cestou.

Autentizace
Session cookie zjišťuje, kdo je uživatel. Právě její automatické přiložení vytváří typický CSRF vektor; autentizace tokenem v explicitní hlavičce má jiný model rizika.
CORS
CORS určuje, zda skript smí číst cross-origin odpověď. Nezastavuje nutně odeslání formuláře a nesmí se používat jako CSRF kontrola.
XSS
XSS spouští kód uvnitř důvěryhodného originu. Takový kód může přečíst token ze stránky a poslat legitimně vypadající požadavek, proto CSRF nenahradí ochranu výstupu.
RBAC
RBAC rozhoduje, zda přihlášený uživatel smí akci provést. CSRF brání podvržení úmyslu, ale nesnižuje příliš široké oprávnění administrátora.

Výhody a omezení

Ochrana funguje jen pro správně vymezený tok relace.

Přínosy

  • brání cizímu webu provést mutaci jen díky přiložené session cookie
  • dává formulářům a AJAX mutacím jednotný serverový kontrakt
  • v kombinaci se SameSite a Origin kontrolou přidává více nezávislých vrstev
  • selhání lze testovat jako odmítnutý request bez vedlejšího efektu

Rizika a chyby

  • spoléhat na CORS nebo skryté tlačítko místo ověření tokenu na serveru
  • vkládat token do URL, logů či analytických nástrojů
  • nechat GET měnit data a tvrdit, že CSRF se týká pouze POST formulářů
  • předpokládat, že CSRF token ochrání aplikaci před XSS spuštěným ve stejném originu

Kdy je nutná

Cookie-based web potřebuje ochranu u každé důležité mutace.

CSRF ochrana je výchozí součást stateful webové aplikace: administrace, zákaznický účet, objednávkový tok a interní systém mívají cookie relaci a formuláře. Framework může generování a ověřování tokenu zjednodušit, ale tým musí určit, které endpointy mění stav, co je bezpečná metoda a zda mají všechny alternativní vstupy stejnou ochranu.

Čisté machine-to-machine API s access tokenem předávaným výhradně explicitní hlavičkou nemá stejný cookie CSRF vektor. Přesto je potřeba ověřit skutečný způsob klienta: token v cookie, browser credentials nebo mix session a API může riziko vrátit. Bezpečnostní pravidlo se odvozuje od chování prohlížeče, ne od názvu endpointu.

Na co myslet

Mutace chránit konzistentně napříč UI i API.

Nejlepší ochrana je nudná a všudypřítomná: neponechává ověření tokenu na paměti každého controlleru.

  • zapnout frameworkový CSRF middleware pro stateful browser cesty a netvořit výjimky bez důvodu
  • nechat GET, HEAD a další bezpečné metody bez businessových změn
  • nepřenášet CSRF token v URL ani ho nezapisovat do aplikačních a analytických logů
  • nastavit Secure, HttpOnly a vhodný SameSite režim session cookie podle skutečného login toku
  • testovat platný token, chybějící token, token jiné relace i mutaci z jiného originu

Časté otázky

Kdy token chrání a kdy ne

Potřebuji CSRF token, když používám cookie session?

Pro mutující browser požadavky obvykle ano. Cookie může prohlížeč přiložit i k požadavku, který vyvolal cizí web. Token nebo jiná vhodná serverová kontrola ověřuje původ záměru.

Nahradí CORS CSRF ochranu?

Ne. CORS hlavně omezuje, zda cizí JavaScript přečte odpověď. Cizí formulář může v některých případech request odeslat i bez možnosti odpověď číst.

Stačí SameSite cookie?

SameSite významně pomáhá, ale není univerzální náhradou tokenu. Záleží na režimu cookie, navigaci, kompatibilitě a legitimních cross-site přihlašovacích tocích.

Chrání CSRF token proti XSS?

Ne. Skript spuštěný uvnitř stejného originu může token ze stránky použít. XSS se brání bezpečným výstupem, omezením nebezpečného HTML a dalšími vrstvami jako CSP.

Jak řeším backend v praxi

Bezpečnostní kontrolu spojuji s oprávněním a reálným tokem dat.

U interních systémů a e-commerce řeším ochranu formulářů, API hranice, práci s relací, role i bezpečné změny dat.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.