Za preprečevanje CSRF napadov asp.net mvc ponuja funkcijo ValidateAntiForgeryToken proti ponarejanju in v novi različici jedrnega ogrodja asp.net Microsoft ponuja funkcijo AutoValidateAntiforgeryToken, natančneje ValidateAntiForgeryToken in AutoValidateAntiforgeryToken Kakšna je razlika, bo ta članek podrobno pojasnil.
Koncept CSRF
CSRF ponarejanje zahtevkov med lokacijami, podobno kot XSS napadi, je izjemno škodljivo, kar lahko razumete takole: napadalec ukrade vašo identiteto in pošlje zlonamerno zahtevo v vašem imenu, ki je za strežnik povsem legitimna, vendar izvede dejanje, ki ga napadalec pričakuje, kot so pošiljanje e-pošte in sporočil v vašem imenu, kraja računa, dodajanje sistemskih administratorjev ali celo nakup blaga, prenosi virtualne valute itd. Web A je spletna stran z ranljivostjo CSRF, Web B je zlonamerna spletna stran, ki jo je ustvaril napadalec, uporabnik C pa je legitimni uporabnik Web A.
ASP.NET prometna nesreča proti napadom CSRF
Na strani za ogled uporabite @Html.AntiForgeryToken() za dodajanje oznake, in ko uporabnik dostopa do strani, bo backend samodejno ustvaril skrito html kodo z oznako, kot sledi:
<vhodno ime="__RequestVerificationToken" tip="skrito" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_KUUDbK-LS4HD16pJusFRppj-dEGc" /> Ozadni krmilnik mora biti nastavljen [ValidateAntiForgeryToken] funkciji za preprečevanje ponarejanja oddaj obrazcev.
ValidateAntiForgeryToken in AutoValidateAntiforgeryToken sta različna
AutoValidateAntiforgeryTokenAuthorizationFilter podeduje ValidateAntiforgeryTokenAuthorizationFilter, vendar v njem prepiše le metodo ShouldValidate.
Lastnost AutoValidateAntiforgeryToken, ki omogoča validacijo žetonov proti ponarejanju za vse nevarne HTTP metode.HTTP metode, razen GET, HEAD, OPTIONS in TRACE, vse zahtevajo žeton proti ponarejanju。 To se lahko uporabi kot globalni filter, ki privzeto sproži preverjanje žetonov proti ponarejanju v aplikaciji.
Prijava do hiperpovezave je vidna.
AutoValidateAntiforgeryTokenAttribute validira klic AutoValidateAntiforgeryTokenAuthorizationFilter, ki podeduje iz ValidateAntiforgeryTokenAuthorizationFilter,Metoda ShouldValidate je bila prepisana, vrnitev true pomeni, da jo je treba potrditi, in vrnitev false ne bo validirana, kot je prikazano na spodnji sliki:
Analizirajte izvorno kodo:
AutoValidateAntiforgeryTokenAttribute omogoča globalno uporabo preverjanja žetonov proti ponarejanju na vse nevarne metode, kot so POST, PUT, PATCH in DELETE. Torej ni treba dodajati lastnosti [ValidateAntiForgeryToken] vsaki akciji, ki jo zahteva.
Za uporabo dodajte naslednjo kodo v metodo Startup vašega ConfigureServices:
Če morate ignorirati avtentikacijo proti ponarejevanju, lahko dodate [IgnoreAntiforgeryTokenpripisati dejanju.
Včasih se lahko zgodi, da morate označiti več zahtevkov na krmilniku, medtem ko potrebujete nekatere zahteve, ki jih ni treba ponarejati, kot so različne operacije na osnovi GET-a. Obstaja več orodij, ki jih lahko uporabite, da bo postopek bolj priročen in udoben. Prva je lastnost AutoValidateAntiforgeryToken. Obnaša se kot lastnost ValidateAntiForgeryToken. Vendar pa samodejno ignorira dejanja, ki jih kličejo metode, zasnovane za pridobivanje podatkov: GET, HEAD, OPTIONS in TRACE. To vam omogoča, da hitro in enostavno dodate metode proti ponarejanju vsem metodam, ki lahko spreminjajo podatke, ne da bi vplivale na način pridobivanja podatkov.
Naslednja koda je primer lastnosti AutoValidateAntiforgeryToken:
V tem primeru bosta obe običajni Index operaciji (GET) delovali ne glede na vir, medtem ko bosta tako operacija Index z metodo POST kot RemoveUser kot metoda Delete zahtevali, da odjemalec uporabi žeton proti ponarejevanju.
Prilagodite ustrezne informacije
Veliko ljudi se morda sprašuje, ali je mogoče ime ustvarjene skrite domene zamenjati z njihovim lastnim in ali je mogoče ime piškotka spremeniti v svoje.
Odgovor je da, na kratko pokažimo:
V metodi ConfigureServices pri zagonu dodajte naslednje za ustrezno spremembo privzetega imena.
Opomba: Največja razlika med asp.net jedrom in asp.net je,Core podpira posredovanje validacijskih parametrov z zahtevo po glavi, ne da bi oblikoval oblike!
private const string AntiforgeryTokenFieldName = "__RequestVerificationToken"; private const string AntiforgeryTokenHeaderName = "RequestVerificationToken";
Izvorno kodo si lahko ogledate:Prijava do hiperpovezave je vidna.
Testna koda:
Rezultat: Poskus dostopa do metode test1 vrne napako 400, dostop do metode test2 vrne parameter str, ki smo ga prenesli, in lahko vidite, da funkcija AutoValidateAntiforgeryToken ne prestreže zahteve GET.
(Konec)
|