Dopad
Cross-Site Request Forgery (CSRF) umožňuje útočníkovi přimět prohlížeč oběti k provedení nechtěných akcí na jiném webu, kde je oběť aktuálně ověřena. Vzhledem k tomu, že prohlížeče automaticky zahrnují okolní přihlašovací údaje, jako jsou soubory cookie, do požadavků, útočník může vytvořit operace měnící stav – jako je změna hesel, mazání dat nebo zahájení transakcí – bez vědomí uživatele.
Hlavní příčina
Základní příčinou CSRF je výchozí chování webového prohlížeče při odesílání souborů cookie spojených s doménou, kdykoli je do této domény podán požadavek, bez ohledu na původ požadavku [S1]. Bez specifického ověření, že požadavek byl záměrně spuštěn z vlastního uživatelského rozhraní aplikace, server nemůže rozlišit mezi legitimní akcí uživatele a falešnou akcí.
Ochranné mechanismy Django CSRF
Django poskytuje vestavěný obranný systém ke zmírnění těchto rizik prostřednictvím integrace middlewaru a šablon [S2].
Aktivace middlewaru
django.middleware.csrf.CsrfViewMiddleware zodpovídá za ochranu CSRF a je obvykle ve výchozím nastavení povoleno [S2]. Musí být umístěn před jakýmkoli zobrazením middlewaru, který předpokládá, že útoky CSRF již byly zpracovány [S2].
Implementace šablony
U všech interních formulářů POST musí vývojáři zahrnout značku {% csrf_token %} do prvku <form> [S2]. Tím je zajištěno, že v požadavku bude zahrnut jedinečný tajný token, který pak server ověří proti relaci uživatele.
Rizika úniku tokenů
Důležitým detailem implementace je, že {% csrf_token %} by nikdy neměl být zahrnut do formulářů cílených na externí adresy URL [S2]. V opačném případě by došlo k úniku tajného tokenu CSRF třetí straně, což by mohlo ohrozit zabezpečení relace uživatele [S2].
Obrana na úrovni prohlížeče: Soubory cookie SameSite
Moderní prohlížeče zavedly atribut SameSite pro záhlaví Set-Cookie, aby poskytly vrstvu ochrany do hloubky [S1].
- Přísné: Soubor cookie se odesílá pouze v kontextu první strany, což znamená, že web v řádku adresy URL odpovídá doméně souboru cookie [S1].
- Lax: Soubor cookie se neodesílá na dílčí požadavky mezi weby (jako jsou obrázky nebo snímky), ale je odeslán, když uživatel přejde na původní web, například pomocí standardního odkazu [S1].
Jak to testuje FixVibe
FixVibe nyní obsahuje ochranu CSRF jako hradlovanou aktivní kontrolu. Po ověření domény active.csrf-protection zkontroluje objevené formuláře měnící stav, zkontroluje vstupy ve tvaru tokenu CSRF a signály cookie SameSite, poté se pokusí o odeslání falešného původu s nízkým dopadem a oznámí pouze, když to server přijme. Kontroly souborů cookie také označují slabé atributy SameSite, které snižují hloubkovou ochranu CSRF.
