Kas yra CSRF?
CSRF (Cross-site request forgery), taip pat žinomas kaip vieno paspaudimo ataka / seanso važiavimas, kinų santrumpa: CSRF/XSRF. CSRF (Cross Site Request Forgery) yra tinklo atakos metodas, kuris 2007 m. buvo įtrauktas į vieną iš 20 didžiausių saugumo rizikų internete. Pastaraisiais metais tapo gerai žinoma ir kita saugumo rizika, pvz., SQL scenarijaus injekcija ir kelių svetainių scenarijų atakos, ir daugelis svetainių nuo jų apsisaugojo. Tačiau CSRF daugumai žmonių vis dar yra svetima sąvoka. Net garsiausias "Gmail" 2007 m. pabaigoje turėjo CSRF pažeidžiamumą, į kurį buvo įsilaužta ir "Gmail" naudotojams buvo padaryta didžiulių nuostolių.
Ką gali padaryti CSRF?
CSRF atakas galite suprasti taip: užpuolikas pavogė jūsų tapatybę ir išsiuntė kenkėjiškas užklausas jūsų vardu. CSRF gali siųsti el. laiškus, siųsti žinutes, pavogti jūsų sąskaitą ar net pirkti prekes ir pervesti virtualią valiutą jūsų vardu...... Sukeltos problemos apima: asmens privatumo nutekėjimą ir turto saugumą.
ASP.NET MVC AntiForgeryToken apsaugos nuo klastojimo ženklas
ASP.NET MVC formos atpažinimo ženklai ir slapukų atpažinimo ženklai automatiškai generuojami pagal numatytuosius nustatymus, kai peržiūros puslapyje naudojamas @Html.AntiForgeryToken(). Tačiau, jei norime rankiniu būdu gauti fone, turime naudoti System.Web.Helpers.AntiForgery klasę, o draugai, kurie domisi šaltinio kodo peržiūra, pamatys, kad iš tikrųjų @Html.AntiForgeryToken() vidinio iškvietimo metodas yra toks pat kaip ir AntiForgery klasės.
Jis daugiausia naudojamas norint gauti atitinkamą formą ir slapuko raktą dviem statiniais būdais: AntiForgery.GetHtml() arba AntiForgery.GetTokens(eilutė oldCookieToken, iš eilutės newCookieToken, iš eilutės formToken). Tačiau reikia pažymėti, kad iškvietus GetHtml metodą, atitinkamas slapuko raktas bus automatiškai sugeneruotas, o tada HTML kodo dalis su paslėptos formos atpažinimo ženklo reikšmės lauku bus grąžinta tiesiogiai, o grąžinta reikšmė bus tokia forma:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Paslėpto lauko pavadinimas paprastai fiksuojamas kaip "__RequestVerificationToken", o reikšmė yra užšifruotas saugos atpažinimo ženklas. Šis paslėptas laukas paprastai dedamas į pateikiamas formą, o galutinis pateikimas patikrinamas pagal slapuko raktą.
Jei naudojate GetTokens metodą, galite gauti užšifruotą formą ir slapuko raktą perdavę atitinkamus parametrus, tačiau čia turite patys išsaugoti atitinkamas reikšmes.
Toliau pristatysime "AntiForgeryToken" rankinio atnaujinimo metodą, daugiausia per AJAX.
Pakuotės kodas:
Bandymo kodas:
Mes nustatėme, kad siunčiant ajax užklausą, automatiškai įtraukiami __RequestVerificationToken parametrai, kaip parodyta paveikslėlyje žemiau:
|