Mis on CSRF?
CSRF (Cross-site request forgery), tuntud ka kui ühe kliki rünnak/session riding, hiina lühend: CSRF/XSRF. CSRF (Cross Site Request Forgery) on võrgurünnaku meetod, mis loeti 2007. aastal internetis üheks 20 suurimaks turvariskiks. Teised turvariskid, nagu SQL-skripti süstimine ja domeenideülene skriptirünnakud, on viimastel aastatel muutunud tuntuks ning paljud veebilehed on nende eest kaitstud. Siiski on CSRF enamikule inimestele endiselt võõras mõiste. Isegi kõige kuulsam Gmail sai 2007. aasta lõpus CSRF-haavatavuse, mis häkiti ja põhjustas Gmaili kasutajatele suuri kahjusid.
Mida saab CSRF teha?
CSRF-rünnakuid saab mõista nii: ründaja on varastanud sinu identiteedi ja saatnud pahatahtlikke päringuid sinu nimel. CSRF saab teha asju nagu saata e-kirju, sõnumeid, varastada su kontot või isegi osta kaupu ja kanda virtuaalvaluutat sinu nimel...... Põhjustatud probleemid hõlmavad isikuandmete lekkeid ja kinnisvara turvalisust.
ASP.NET MVC võltsimisvastane märk AntiForgeryToken
ASP.NET MVC-s genereeritakse vormitokenid ja küpsiste tokenid vaikimisi automaatselt iga kord, kui vaatelehel kasutatakse @Html.AntiForgeryToken(). Kui tahame aga taustal käsitsi otsingut saavutada, peame kasutama klassi System.Web.Helpers.AntiForgery ning sõbrad, kes on huvitatud lähtekoodi vaatamisest, leiavad, et tegelikult on @Html.AntiForgeryToken() sisemise kutsumise meetod sama, mis AntiForgery klassil.
Seda kasutatakse peamiselt vastava vormi ja küpsise tokeni saamiseks kahe staatilise meetodi abil: AntiForgery.GetHtml() või AntiForgery.GetTokens (string oldCookieToken, out string newCookieToken, out string formToken). Siiski tuleb märkida, et kui GetHtml meetod on kutsutud, genereeritakse vastav küpsise token automaatselt ning seejärel tagastatakse otse HTML-koodi tükk koos vormitokeni väärtuse peidetud väljaga, ning tagastatud väärtus on järgmises vormis:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Peidetud välja nimi on tavaliselt fikseeritud kujule "__RequestVerificationToken" ning väärtus on krüpteeritud turvatoken. See peidetud väli paigutatakse tavaliselt esitatavasse vormi ning lõplik postitus kontrollitakse küpsise tokeni vastu.
Kui kasutad GetTokens meetodit, saad krüpteeritud vormi ja küpsise tokeni pärast vastavate parameetrite sisestamist, kuid siin pead vastavad väärtused ise salvestama.
Järgmisena tutvustame meetodit AntiForgeryTokeni käsitsi uuendamiseks, peamiselt AJAX-i kaudu.
Paketikood:
Testkood:
Leidsime, et ajax-päringu saatmisel lisatakse automaatselt __RequestVerificationToken parameetrid, nagu alloleval joonisel näidatud:
|