Siekiant užkirsti kelią CSRF atakoms, asp.net mvc teikia apsaugos nuo klastojimo atakų funkciją "ValidateAntiForgeryToken", o naujoje "asp.net" pagrindinės sistemos versijoje "Microsoft" teikia "AutoValidateAntiforgeryToken" funkciją, konkrečiai "ValidateAntiForgeryToken" ir "AutoValidateAntiforgeryToken" Koks skirtumas, šiame straipsnyje bus išsamiai paaiškinta.
CSRF koncepcija
CSRF kelių svetainių užklausų klastojimas, kaip ir XSS atakos, yra labai žalingas, galite tai suprasti taip: užpuolikas pavagia jūsų tapatybę ir jūsų vardu siunčia kenkėjišką užklausą, kuri yra visiškai teisėta serveriui, tačiau atlieka veiksmą, kurio tikisi užpuolikas, pvz., siųsti el. laiškus ir pranešimus jūsų vardu, pavogti paskyrą, pridėti sistemos administratorius ar net pirkti prekes, virtualios valiutos pervedimai ir kt. Web A yra svetainė, turinti CSRF pažeidžiamumą, Web B yra kenkėjiška svetainė, kurią sukūrė užpuolikas, o vartotojas C yra teisėtas Web A vartotojas.
ASP.NET MVC nuo CSRF atakų
Peržiūros puslapyje naudokite @Html.AntiForgeryToken(), kad pridėtumėte žymą, o vartotojui pasiekus puslapį, vidinė sistema automatiškai sugeneruos paslėptą html kodą su žyma, kaip nurodyta toliau:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_KUUDbK-LS4HD16pJusFRppj-dEGc" /> Fono valdiklis turi būti nustatytas [ValidateAntiForgeryToken] funkcija, kad būtų išvengta formų pateikimo klastojimo.
ValidateAntiForgeryToken ir AutoValidateAntiforgeryToken skiriasi
AutoValidateAntiforgeryTokenAuthorizationFilter paveldi ValidateAntiforgeryTokenAuthorizationFilter, bet tik perrašo jame esantį metodą ShouldValidate.
AutoValidateAntiforgeryToken ypatybė, kuri tikrina apsaugos nuo padirbinėjimo atpažinimo ženklus visais nesaugiais HTTP metodais.HTTP metodams, išskyrus GET, HEAD, OPTIONS ir TRACE, reikalingas apsaugos nuo padirbinėjimo raktas。 Tai gali būti taikoma kaip visuotinis filtras, kad pagal numatytuosius nustatymus būtų suaktyvintas programos apsaugos nuo klastojimo atpažinimo ženklo patvirtinimas.
Hipersaito prisijungimas matomas.
AutoValidateAntiforgeryTokenAttribute tikrina AutoValidateAntiforgeryTokenAuthorizationFilter iškvietimą, kuris paveldi iš ValidateAntiforgeryTokenAuthorizationFilter,Metodas ShouldValidate buvo perrašytas, grąžinant teisingą reiškia, kad jis turi būti patvirtintas, o grąžinus false nebus patvirtintas, kaip parodyta toliau pateiktame paveikslėlyje:
Išanalizuokite šaltinio kodą:
AutoValidateAntiforgeryTokenAttribute leidžia visuotinai taikyti apsaugos nuo padirbinėjimo žetonų patvirtinimą visiems nepatikimiems metodams, tokiems kaip POST, PUT, PATCH ir DELETE. Taigi jums nereikia pridėti [ValidateAntiForgeryToken] ypatybės prie kiekvieno veiksmo, kuriam to reikia.
Norėdami jį naudoti, pridėkite šį kodą prie "ConfigureServices" paleisties klasės metodo:
Jei norite nepaisyti apsaugos nuo klastojimo autentifikavimo, galite pridėti [IgnoreAntiforgeryTokenveiksmo atributas.
Kartais gali tekti pažymėti kelias užklausas valdiklyje, o kai kurių užklausų, kurių nereikia suklastoti, pvz., įvairių GET pagrįstų operacijų. Yra keletas įrankių, kuriuos galite naudoti, kad procesas būtų patogesnis ir patogesnis. Pirmasis yra AutoValidateAntiforgeryToken ypatybė. Jis elgiasi kaip ValidateAntiForgeryToken savybė. Tačiau jis automatiškai ignoruos veiksmus, kuriuos iškviečia duomenų gavimo metodai: GET, HEAD, OPTIONS ir TRACE. Tai leidžia greitai ir lengvai pridėti apsaugos nuo klastojimo metodus prie visų metodų, kurie gali pakeisti duomenis nedarant įtakos duomenų gavimo būdui.
Šis kodas yra ypatybės AutoValidateAntiforgeryToken pavyzdys:
Šiame pavyzdyje abi įprastos indekso operacijos (GET) veiks nepriklausomai nuo šaltinio, o indekso operacija su POST metodu ir operacija RemoveUser kaip naikinimo metodas reikalauja, kad klientas naudotų apsaugos nuo klastojimo atpažinimo ženklą.
Tinkinkite atitinkamą informaciją
Daugeliui žmonių gali kilti klausimas, ar sugeneruoto paslėpto domeno pavadinimą galima pakeisti savo, ir ar slapuko pavadinimą galima pakeisti į savo.
Atsakymas yra taip, trumpai parodykime:
Paleisties "ConfigureServices" metode pridėkite šiuos dalykus, kad atitinkamai pakeistumėte numatytąjį pavadinimą.
Pastaba: Didžiausias skirtumas tarp asp.net šerdies ir asp.net yraBranduolys palaiko tikrinimo parametrų perdavimą prašant antraštės, o ne formuoti formas!
privati const eilutė AntiforgeryTokenFieldName = "__RequestVerificationToken"; privati const eilutė AntiforgeryTokenHeaderName = "RequestVerificationToken";
Šaltinio kodą galite peržiūrėti:Hipersaito prisijungimas matomas.
Bandymo kodas:
Rezultatas: Bandant pasiekti test1 metodą pateikiama 400 klaida, prisijungus prie test2 metodo, grąžinamas str parametras, kurį praėjome, ir matote, kad AutoValidateAntiforgeryToken funkcija neperima GET užklausos.
(Pabaiga)
|