Czy możesz wyjaśnić cel ValidateAntiForgeryToken i pokazać mi przykład ValidateAntiForgeryToken
w MVC 4?
Nie mogłem znaleźć przykładów wyjaśniających ten atrybut?
.BeginForm
pomocnika. Tak więc ta rzecz jest dostępna automatycznie, jak w Rails
Czy możesz wyjaśnić cel ValidateAntiForgeryToken i pokazać mi przykład ValidateAntiForgeryToken
w MVC 4?
Nie mogłem znaleźć przykładów wyjaśniających ten atrybut?
.BeginForm
pomocnika. Tak więc ta rzecz jest dostępna automatycznie, jak w Rails
Odpowiedzi:
Obsługa zapobiegania fałszerstwom MVC zapisuje unikalną wartość do pliku cookie obsługującego tylko HTTP, a następnie ta sama wartość jest zapisywana w formularzu. Po przesłaniu strony pojawia się błąd, jeśli wartość pliku cookie nie zgadza się z wartością formularza.
Należy pamiętać, że ta funkcja zapobiega fałszowaniu żądań w różnych witrynach . Oznacza to, że formularz z innej witryny publikuje w Twojej witrynie próbę przesłania ukrytej treści przy użyciu poświadczeń uwierzytelnionego użytkownika. Atak polega na nakłonieniu zalogowanego użytkownika do przesłania formularza lub po prostu programowym uruchomieniu formularza podczas ładowania strony.
Ta funkcja nie zapobiega atakom polegającym na fałszowaniu danych lub manipulowaniu danymi.
Aby go użyć, udekoruj metodę akcji lub kontroler ValidateAntiForgeryToken
atrybutem i umieść wywołanie @Html.AntiForgeryToken()
w formularzu wysyłającym wiadomość do metody.
Podstawowym celem atrybutu ValidateAntiForgeryToken jest zapobieganie atakom polegającym na fałszowaniu żądań w różnych witrynach.
Fałszowanie żądań między witrynami to atak, w którym szkodliwy element skryptu, złośliwe polecenie lub kod są wysyłane z przeglądarki zaufanego użytkownika. Więcej informacji na ten temat można znaleźć na stronie http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages .
Jest prosty w użyciu, musisz ozdobić metodę za pomocą atrybutu ValidateAntiForgeryToken, jak poniżej:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateProduct(Product product)
{
if (ModelState.IsValid)
{
//your logic
}
return View(ModelName);
}
Wywodzi się z przestrzeni nazw System.Web.Mvc.
Twoim zdaniem dodaj ten kod, aby dodać token, dzięki czemu będzie on używany do sprawdzania poprawności formularza po przesłaniu.
@Html.AntiForgeryToken()
W programie ASP.Net Core token zapobiegający fałszowaniu jest automatycznie dodawany do formularzy, więc nie trzeba go dodawać, @Html.AntiForgeryToken()
jeśli używasz elementu formy brzytwy lub jeśli używasz IHtmlHelper.BeginForm i jeśli metoda formularza nie jest GET.
Wygeneruje element wejściowy dla formularza podobny do tego:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8HSQ_cdnkvBPo-jales205VCq9ISkg9BilG0VXAiNm3Fl5Lyu_JGpQDA4_CLNvty28w43AL8zjeR86fNALdsR3queTfAogif9ut-Zd-fwo8SAYuT0wmZ5eZUYClvpLfYm4LLIVy6VllbD54UxJ8W6FA">
A gdy użytkownik prześle formularz, ten token jest weryfikowany po stronie serwera, jeśli włączono sprawdzanie poprawności.
[ValidateAntiForgeryToken]
atrybutu można użyć przeciwko działaniom. Żądania dotyczące działań, w których zastosowano ten filtr, są blokowane, chyba że żądanie zawiera prawidłowy token antygraniczny.
[AutoValidateAntiforgeryToken]
atrybut może być użyty przeciwko kontrolerom. Ten atrybut działa identycznie jak atrybut ValidateAntiForgeryToken, z tym wyjątkiem, że nie wymaga tokenów dla żądań wykonanych przy użyciu następujących metod HTTP:
GET
HEAD
OPTIONS
TRACE
Informacje dodatkowe: https://docs.microsoft.com/pl-pl/aspnet/core/security/anti-request-forgery
Microsoft zapewnia nam wbudowaną funkcjonalność, której używamy w naszej aplikacji do celów bezpieczeństwa, więc nikt nie może włamać się na naszą stronę ani atakować niektórych ważnych informacji.
Z celu ValidateAntiForgeryToken w aplikacji MVC firmy Harpreet Singh:
Zastosowanie ValidateAntiForgeryToken
Spróbujmy na prostym przykładzie, aby zrozumieć tę koncepcję. Nie chcę, aby było to zbyt skomplikowane, dlatego zamierzam użyć szablonu aplikacji MVC, który jest już dostępny w Visual Studio. Zrobimy to krok po kroku. Zaczynajmy.
Krok 1 - Utwórz dwie aplikacje MVC z domyślnym szablonem internetowym i nadaj te nazwy odpowiednio CrossSite_RequestForgery i Attack_Application.
Teraz otwórz Web Config aplikacji CrossSite_RequestForgery i zmień parametry połączenia na podane poniżej, a następnie zapisz.
`
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF; Integrated Security=true;" providerName="System.Data.SqlClient" /> </connectionStrings>
Teraz kliknij Narzędzia >> NuGet Package Manager, a następnie Konsola Menedżera pakietów
Teraz uruchom poniższe trzy polecenia w konsoli Menedżera pakietów, aby utworzyć bazę danych.
Enable-Migrations add -igration pierwsza aktualizacja-baza danych
Ważne uwagi - Stworzyłem bazę danych z pierwszym podejściem do kodu, ponieważ chcę zrobić ten przykład w sposób, w jaki działają programiści. Możesz także ręcznie utworzyć bazę danych. To Twój wybór.
- Teraz otwórz Kontrolera konta. Tutaj zobaczysz metodę rejestracji, której typem jest post. Powyżej tej metody powinien być dostępny atrybut jako [ValidateAntiForgeryToken]. Skomentuj ten atrybut. Teraz kliknij prawym przyciskiem myszy na rejestr i kliknij przejdź do widoku. Tam ponownie znajdziesz pomocnika HTML jako @ Html.AntiForgeryToken (). Skomentuj również ten. Uruchom aplikację i kliknij przycisk Zarejestruj. Adres URL zostanie otwarty jako:
http: // localhost: 52269 / Konto / Zarejestruj się
Notatki - wiem, że pytanie, które pojawia się w głowach wszystkich czytelników, brzmi: dlaczego tych dwóch pomocników należy skomentować, ponieważ wszyscy wiedzą, że są one używane do zatwierdzenia żądania. Następnie chcę wam wszystkim powiedzieć, że dzieje się tak tylko dlatego, że chcę pokazać różnicę przed zastosowaniem tych pomocników i przed nimi.
Teraz otwórz drugą aplikację, którą jest Attack_Application. Następnie otwórz Zarejestruj metodę Kontrolera konta. Po prostu zmień metodę POST na prostą, pokazaną poniżej.
Formularz rejestracyjny
- @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
- @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
- @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)
7. Załóżmy, że jesteś hakerem i znasz adres URL, z którego możesz zarejestrować użytkownika w aplikacji CrossSite_RequestForgery. Teraz utworzyłeś witrynę Forgery jako Attacker_Application i po prostu umieściłeś ten sam adres URL w metodzie post.
8. Uruchom teraz tę aplikację, wypełnij pola rejestru i kliknij rejestr. Zobaczysz, że jesteś zarejestrowany w aplikacji CrossSite_RequestForgery. Jeśli sprawdzisz bazę danych aplikacji CrossSite_RequestForgery, zobaczysz i wprowadziłeś wpis.
- Ważne - Teraz otwórz aplikację CrossSite_RequestForgery i skomentuj token w kontrolerze konta i zarejestruj widok. Spróbuj zarejestrować się ponownie w tym samym procesie. Następnie wystąpi błąd, jak poniżej.
Błąd serwera w aplikacji „/”. ________________________________________ Wymagany plik cookie zapobiegający fałszowaniu „__RequestVerificationToken” nie jest obecny.
Tak mówi koncepcja. Co dodajemy w View tj. @ Html.AntiForgeryToken () generuje __RequestVerificationToken w czasie ładowania i [ValidateAntiForgeryToken] dostępny w metodzie Controller. Dopasuj ten token na czas postu. Jeśli token jest taki sam, oznacza to, że jest to prawidłowe żądanie.