|
|
Julkaistu 20.2.2021 19.57.29
|
|
|
|

CSRF-hyökkäysten estämiseksi asp.net mvc tarjoaa ValidateAntiForgeryToken -väärennyshyökkäysominaisuuden, ja uudessa asp.net core frameworkin versiossa Microsoft tarjoaa AutoValidateAntiforgeryToken -ominaisuuden, erityisesti ValidateAntiForgeryToken ja AutoValidateAntiforgeryToken Mikä on ero, tässä artikkelissa selitämme yksityiskohtaisesti.
CSRF-konsepti
CSRF:n sivustojen välisen pyynnön väärennös, kuten XSS-hyökkäyksetkin, on erittäin haitallista, voit ymmärtää sen näin: hyökkääjä varastaa henkilöllisyytesi ja lähettää haitallisen pyynnön nimissäsi, mikä on täysin laillista palvelimelle, mutta suorittaa odotettavissa olevan toiminnon, kuten sähköpostien ja viestien lähettämisen sinun nimissäsi, tilisi varastamisen, järjestelmänvalvojien lisäämisen tai jopa tavaroiden ostamisen, virtuaalivaluutansiirrot jne. Web A on verkkosivusto, jossa on CSRF-haavoittuvuus, Web B on hyökkääjän rakentama haitallinen verkkosivusto, ja käyttäjä C on laillinen Web A:n käyttäjä.
ASP.NET MVC CSRF-hyökkäyksiä vastaan
Näkymäsivulla käytä @Html.AntiForgeryToken() lisätäksemme tagin, ja kun käyttäjä pääsee sivulle, taustajärjestelmä luo automaattisesti piilotetun html-koodin tunnisteella seuraavasti:
<syöttönimi="__RequestVerificationToken" type="piilotettu" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_KUUDbK-LS4HD16pJusFRppj-dEGc" /> Taustaohjain täytyy asettaa [ValidoiAntiForgeryToken] ominaisuus, joka estää lomakkeiden väärentämisen.
ValidateAntiForgeryToken ja AutoValidateAntiforgeryToken ovat erilaisia
AutoValidateAntiforgeryTokenAuthorizationFilter perii ValidateAntiforgeryTokenAuthorizationFilterin, mutta kirjoittaa uudelleen vain ShouldValidate-metodin siinä.
AutoValidateAntiforgeryToken-ominaisuus, joka aiheuttaa väärennösten estäjätokenien validoinnin kaikille turvattomille HTTP-menetelmille.HTTP-menetelmät paitsi GET, HEAD, OPTIONS ja TRACE vaativat kaikki väärennösten estomerkin。 Tätä voidaan soveltaa globaalina suodattimena, joka käynnistää sovelluksen väärennösten estotokenien validoinnin oletuksena.
Hyperlinkin kirjautuminen on näkyvissä.
AutoValidateAntiforgeryTokenAttribute validoi kutsun AutoValidateAntiforgeryTokenAuthorizationFilteriin, joka perii ValidateAntiforgeryTokenAuthorizationFilter,ShouldValidate-menetelmä on kirjoitettu uudelleen, ja true-palautus tarkoittaa, että se täytyy validoida, ja false -menetelmää ei validoita, kuten alla olevassa kuvassa näkyy:
Analysoi lähdekoodi:
AutoValidateAntiforgeryTokenAttribute mahdollistaa väärentämisen estävän tokenin validoinnin maailmanlaajuisesti kaikkiin turvattomiin menetelmiin, kuten POST, PUT, PATCH ja DELETE. Joten sinun ei tarvitse lisätä [ValidateAntiForgeryToken] -ominaisuutta jokaiseen toimintoon, joka sitä vaatii.
Käyttääksesi sitä, lisää seuraava koodi ConfigureServicesin Startup-luokkametodiin:
Jos sinun täytyy jättää väärennösten vastainen todennus huomiotta, voit lisätä [Ignoreeri AntiforgeryTokenAttribua toimintaan.
Joskus saatat joutua merkitsemään useita pyyntöjä ohjaimella samalla kun tarvitset joitakin pyyntöjä, joita ei tarvitse väärentää, kuten erilaisia GET-pohjaisia operaatioita. On olemassa useita työkaluja, joilla prosessista tehdään kätevämpi ja mukavampi. Ensimmäinen on AutoValidateAntiforgeryToken -ominaisuus. Se käyttäytyy kuin ValidateAntiForgeryToken-ominaisuus. Kuitenkin se sivuuttaa automaattisesti datan hakuun suunnitelluilla metodeilla kutsutut toiminnot: GET, HEAD, OPTIONS ja TRACE. Tämä mahdollistaa väärennösten estämisen menetelmien nopean ja helpon lisäämisen kaikkiin menetelmiin, jotka voivat muuttaa dataa vaikuttamatta siihen, miten data haetaan.
Seuraava koodi on esimerkki AutoValidateAntiforgeryToken-ominaisuudesta:
Tässä esimerkissä molemmat normaalit Index-toiminnot (GET) toimivat lähteestä riippumatta, kun taas sekä Index-operaatio POST-metodilla että RemoveUser-operaatio Delete-metodina vaativat asiakasta käyttämään väärentämisen estotokenia.
Muokkaa asiaankuuluvaa tietoa
Monet saattavat pohtia, voisiko luodun piilotetun verkkotunnuksen nimi korvata heidän omallaan ja voiko evästeen nimen muuttaa omakseen.
Vastaus on kyllä, näytetään lyhyesti:
Lisää Startupin ConfigureServices-metodiin seuraava, jotta muutat oletusnimeä sen mukaisesti.
Huomautus: Suurin ero asp.net ytimen ja asp.net välillä on,Core tukee validointiparametrien välittämistä pyytämällä otsikkoa, ei muodostaa muotoja!
private const string AntiforgeryTokenFieldName = "__RequestVerificationToken"; private const string AntiforgeryTokenHeaderName = "RequestVerificationToken";
Voit katsoa lähdekoodin:Hyperlinkin kirjautuminen on näkyvissä.
Testikoodi:
Tulos: Yrittäessämme päästä test1-metodiin palautetaan 400-virhe, test2-metodin käyttäminen palauttaa läpäisemämme str-parametrin, ja näet, että AutoValidateAntiforgeryToken-ominaisuus ei sieppaa GET-pyyntöä.
(Loppu)
|
Edellinen:Fiddler korvaa linkit, pyytää uudelleenohjaustaSeuraava:[käännös] SQL Server SQL Count
|