Co je CSRF?
CSRF (Cross-site request forgery), známý také jako one-click attack/session riding, čínská zkratka: CSRF/XSRF. CSRF (Cross Site Request Forgery) je metoda síťového útoku, která byla v roce 2007 zařazena mezi 20 největších bezpečnostních rizik na internetu. Další bezpečnostní rizika, jako jsou injekce SQL skriptů a útoky skriptů přes domény, se v posledních letech stala známými a mnoho webových stránek se proti nim bránilo. CSRF je však pro většinu lidí stále cizí pojem. Dokonce i nejznámější Gmail měl na konci roku 2007 zranitelnost CSRF, která byla napadena a způsobila uživatelům Gmailu obrovské ztráty.
Co může CSRF udělat?
Útoky CSRF můžete pochopit takto: útočník vám ukradl identitu a poslal škodlivé požadavky na vaše jméno. CSRF může například posílat e-maily, zprávy, krást vám účet nebo dokonce nakupovat zboží a převádět virtuální měnu vaším jménem...... Mezi problémy patří únik soukromí a bezpečnost majetku.
ASP.NET Protipadělková značka MVC AntiCounterfeityToken
V ASP.NET MVC jsou tokeny formulářů a tokenů cookies automaticky generovány ve výchozím nastavení vždy, když je na stránce zobrazení použit @Html.AntiForgeryToken(). Pokud však chceme dosáhnout manuálního vyhledávání na pozadí, musíme použít třídu System.Web.Helpers.AntiForgery a přátelé, kteří mají zájem o prohlédnutí zdrojového kódu, zjistí, že metoda vnitřního volání @Html.AntiForgeryToken() je ve skutečnosti stejná jako u třídy AntiForgery.
Používá se hlavně k získání odpovídajícího formuláře a tokenu cookie dvěma statickými metodami: AntiForgery.GetHtml() nebo AntiForgery.GetTokens(string oldCookieToken, out string newCookieToken, out string formToken). Je však třeba poznamenat, že jakmile je metoda GetHtml vyvolána, odpovídající token cookie bude automaticky generován a poté se vrátí kus HTML kódu s ukrytým polem hodnoty tokenu formuláře, přičemž vrácená hodnota bude v tomto formátu:
<vstupní jméno="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Název skrytého pole je obvykle pevně označen na "__RequestVerificationToken" a hodnota je šifrovaný bezpečnostní token. Toto skryté pole je obvykle umístěno ve formuláři, který má odevzdat, a finální odeslání je ověřeno pomocí cookie tokenu.
Pokud použijete metodu GetTokens, můžete získat šifrovaný formulář a cookie token po předání odpovídajících parametrů, ale zde musíte odpovídající hodnoty uložit sami.
Dále představíme metodu ruční aktualizace AntiForgeryToken, převážně prostřednictvím AJAX.
Kód balíčku:
Testovací kód:
Zjistili jsme, že při odeslání ajax požadavku jsou __RequestVerificationToken parametry automaticky zahrnuty, jak je znázorněno na obrázku níže:
|