Atak Cross-Site Request Forgery w ASP.NET MVC

Zabezpieczenie przy pomocy atrybutu: AntiForgeryToken.


Cross-Site Request Forgery to atak mający na celu wykorzystanie uprawnień użytkownika do wykonania określonych operacji. Użytkownik loguje się do portalu, posiada uprawnienia do dodawania, usuwania lub edycji określonych danych. Osoba atakująca chce wykorzystać fakt, że użytkownik jest zalogowany i przesyła odnośnik, który po otwarciu wysyła określone żądanie do serwera. Ponieważ użytkownik jest zalogowany operacja wygląda prawidłowo i nie ma przeszkód, aby ją wykonać. Przygotowanie prowizorycznej strony jest bardzo proste, wystarczy skopiować kod autentycznej strony i ustawić wartości w formularzu. Po otwarciu fałszywego odnośnika w przeglądarce, dane przy pomocy skryptu JS, zostają automatycznie wysłane bez klikania jakiegokolwiek przycisku.
Aby zapobiec tego typu atakom stosuje się jednorazowe tokeny zabezpieczające, które są przesyłane razem z formularzem. Przeglądarka nie pozwala (istnieje możliwość wykorzystania luki w przeglądarce, aby uzyskać dane z innej witryny jednak obecne przeglądarki są zabezpieczone przed tego typu atakami) na odczyt danych z innych zakładek. Aby żądanie było zaakceptowane przez serwer musi zawierać ten sam wcześniej wysłany token.

AntiForgeryToken

Aby zabezpieczyć metodę w ASP.NET MVC przed atakiem CSRF należy dodać przed metodą w kontrolerze atrybut [ValidateAntiForgeryToken]. Oczywiście tylko przy metodzie POST, metoda GET nie powinna i raczej nie jest używana do operacji na danych.

Przykład użycia:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Zarejestruj(RegisterModel model)
{
//ciało metody 
}
Aby przekazać token w formularzu (kod widoku) należy wykorzystać HTML helper:
@Html.AntiForgeryToken()

Przykładowy plik widoku:

@using (Html.BeginForm()) {

    @Html.AntiForgeryToken()

    <fieldset>
        <legend>Formularz rejestracji:</legend>
	//ciało formularza
        <input type="submit" value="Załóż konto" />
    </fieldset>
}

Ograniczenia AntiForgeryToken

  • wymaga włączonych plików cookies w przeglądarce,
  • tylko dla żądań POST,
  • łatwe do złamania gdy są inne luki w aplikacji (XSS).
Komentarze facebook (polub nasz profil na FB aby je zobaczyć):