[2008-10-27] Obrana před Cross-Site Request Forgery ve formulářích

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 7769
+
0
-

Do formulářů jsem nativně implementoval ochranu před Cross-Site Request Forgery útokem.

Útok spočívá v tom, že útočník naláká oběť na stránku, která vykoná požadavek (přesměrováním nebo javascriptem) na server, na kterém je oběť přihlášena. Ochrana spočívá v tom, že při požadavku se kontroluje token, jehož hodnotu útočník nemůže znát a tudíž ji nemůže ani podstrčit. Může jít třeba o náhodně vygenerované číslo, které se uloží do session.

Aktivace ochrany je velmi snadná:

$form = new Form;
...
$form->addProtection();

Jako parametr je možné uvést text chybové hlášky, která se zobrazí uživateli, pokud je detekováno neoprávněné odeslání.

Token chránící před CSRF útokem má platnost po dobu existence session. Díky tomu nebrání použití ve více oknech najednou (v rámci jedné session). Platnost je však možné zkrátit; na počet sekund, které se uvedou jako druhý parametr.

romansklenar
Člen | 655
+
0
-

kompaktní verzi je tato ochrana funkční pouze s přítomností třídy Environment. Bug or feature?