[2008-10-27] Obrana před Cross-Site Request Forgery ve formulářích
- David Grudl
- Nette Core | 8227
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
V kompaktní verzi je tato ochrana funkční pouze s přítomností třídy Environment. Bug or feature?