Pentru a preveni atacurile CSR asp.net F, mvc oferă funcția anti-contrafacere ValidateAntiForgeryToken, iar în noua versiune a asp.net framework de bază, Microsoft oferă funcția AutoValidateAntiforgeryToken, în special ValidateAntiForgeryToken și AutoValidateAntiforgeryToken Care este diferența, acest articol o va explica în detaliu.
Conceptul CSRF
Falsificarea cererii cross-site CSRF, la fel ca atacurile XSS, este extrem de dăunătoare, poți înțelege astfel: atacatorul îți fură identitatea și trimite o cerere malițioasă în numele tău, care este complet legitimă pentru server, dar execută o acțiune pe care atacatorul o așteaptă, cum ar fi trimiterea de emailuri și mesaje în numele tău, furtul contului, adăugarea administratorilor de sistem sau chiar achiziționarea de bunuri, transferuri de monedă virtuală, etc. Web A este un site web cu o vulnerabilitate CSRF, Web B este un site malițios creat de un atacator, iar Utilizatorul C este un utilizator legitim al Web A.
ASP.NET MVC împotriva atacurilor CSRF
Pe pagina de vizualizare, folosește @Html.AntiForgeryToken() pentru a adăuga o etichetă, iar când utilizatorul accesează pagina, backend-ul va genera automat un cod HTML ascuns cu eticheta, după cum urmează:
<nume de intrare="__RequestVerificationToken" type="hidden" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_KUUDbK-LS4HD16pJusFRppj-dEGc" /> Controlerul de fundal trebuie setat [ValidateAntiForgeryToken] pentru a preveni falsificarea formularelor.
ValidateAntiForgeryToken și AutoValidateAntiforgeryToken sunt diferite
AutoValidateAntiforgeryTokenAuthorizationFilter moștenește ValidateAntiforgeryTokenAuthorizationFilter, dar rescrie doar metoda ShouldValidate în acesta.
Proprietatea AutoValidateAntiforgeryToken care determină validarea tokenurilor anti-falsificare pentru toate metodele HTTP nesigure.Metodele HTTP altele decât GET, HEAD, OPTIONS și TRACE necesită toate un token anti-falsificare。 Aceasta poate fi aplicată ca un filtru global pentru a declanșa validarea implicită a tokenului anti-falsificare a aplicației.
Autentificarea cu hyperlink este vizibilă.
AutoValidateAntiforgeryTokenAttribute validează apelul către AutoValidateAntiforgeryTokenAuthorizationFilter, care moștenește de la ValidateAntiforgeryTokenAuthorizationFilter,Metoda ShouldValidate a fost rescrisă, returnarea true înseamnă că trebuie validată, iar returnarea false nu va fi validată, așa cum se arată în figura de mai jos:
Analizează codul sursă:
AutoValidateAntiforgeryTokenAttribute permite aplicarea globală a validării tokenurilor anti-falsificare tuturor metodelor nesigure, cum ar fi POST, PUT, PATCH și DELETE. Deci nu trebuie să adaugi proprietatea [ValidateAntiForgeryToken] la fiecare acțiune care o cere.
Pentru a-l folosi, adaugă următorul cod la metoda de clasă Startup a ConfigureServices:
Dacă trebuie să ignorați autentificarea anti-contrafacere, puteți adăuga [IgnorăTokenAntifalsificareatribute acțiunii.
Uneori s-ar putea să trebuiască să etichetezi mai multe cereri pe un controler, în timp ce unele cereri nu trebuie falsificate, cum ar fi diverse operațiuni bazate pe GET. Există mai multe unelte pe care le poți folosi pentru a face procesul mai convenabil și mai confortabil. Primul este proprietatea AutoValidateAntiforgeryToken. Se comportă ca proprietatea ValidateAntiForgeryToken. Totuși, va ignora automat acțiunile apelate de metodele concepute pentru recuperarea datelor: GET, HEAD, OPTIONS și TRACE. Acest lucru îți permite să adaugi rapid și ușor metode anti-contrafacere tuturor metodelor care pot modifica datele fără a afecta modul în care sunt recuperate.
Următorul cod este un exemplu al proprietății AutoValidateAntiforgeryToken:
În acest exemplu, ambele operațiuni normale Index (GET) vor funcționa indiferent de sursă, în timp ce atât operația Index cu metoda POST, cât și operația RemoveUser ca metodă Delete vor necesita clientului să folosească un token anti-falsificare.
Personalizează informațiile relevante
Mulți oameni s-ar putea întreba dacă numele domeniului ascuns generat poate fi înlocuit cu propriul lor domeniu și dacă numele cookie-ului poate fi schimbat în al lor.
Răspunsul este da, să demonstrăm pe scurt:
În metoda ConfigureServices a Startup-ului, adăugați următoarele pentru a modifica numele implicit în consecință.
Notă: Cea mai mare diferență între asp.net de bază și asp.net este,Core suportă transmiterea parametrilor de validare prin solicitarea unui antet, nu să formeze forme!
șirul privat const AntiforgeryTokenFieldName = "__RequestVerificationToken"; string const privat AntiforgeryTokenHeaderName = "RequestVerificationToken";
Puteți vizualiza codul sursă:Autentificarea cu hyperlink este vizibilă.
Cod de test:
Rezultat: Încercarea accesării metodei test1 returnează o eroare 400, accesarea metodei test2 returnează parametrul str pe care l-am trecut, iar funcția AutoValidateAntiforgeryToken nu interceptează cererea GET.
(Sfârșit)
|