Kaj je CSRF?
CSRF (Cross-site request propowerry), znan tudi kot napad z enim klikom/vožnja seje, kitajska okrajšava: CSRF/XSRF. CSRF (CrossSite Request Forgery) je metoda omrežnega napada, ki je bila leta 2007 uvrščena med 20 največjih varnostnih tveganj na internetu. Druga varnostna tveganja, kot so vbrizgavanje SQL skript in napadi na skripte med različnimi domenami, so v zadnjih letih postala dobro znana, številne spletne strani pa so se pred njimi branile. Vendar pa je CSRF za večino ljudi še vedno tuj pojem. Tudi najbolj znan Gmail je imel ranljivost CSRF konec leta 2007, ki je bila vdrta in povzročila velike izgube uporabnikom Gmaila.
Kaj lahko CSRF stori?
CSRF napade lahko razumete tako: napadalec vam je ukradel identiteto in poslal zlonamerne zahteve v vašem imenu. CSRF lahko opravlja stvari, kot so pošiljanje e-pošte, sporočil, kraja vašega računa ali celo nakup blaga in prenos virtualne valute v vašem imenu...... Težave, ki nastanejo, vključujejo: uhajanje zasebnosti in varnost lastnine.
ASP.NET MVC AntiForgeryToken proti ponarejanju
V ASP.NET MVC se žetoni obrazcev in žetoni piškotkov samodejno generirajo privzeto, kadar je @Html.AntiForgeryToken() uporabljen na strani za ogled. Če pa želimo doseči ročno pridobivanje v ozadju, moramo uporabiti razred System.Web.Helpers.AntiForgery, prijatelji, ki jih zanima ogled izvorne kode, pa bodo ugotovili, da je metoda notranjega klica @Html.AntiForgeryToken() enaka kot pri razredu AntiForgery.
Uporablja se predvsem za pridobitev ustreznega obrazca in žetona za piškotek preko dveh statičnih metod: AntiForgery.GetHtml() ali AntiForgery.GetTokens(string oldCookieToken, out string newCookieToken, out string formToken). Vendar je treba opozoriti, da se po klicu metode GetHTML samodejno generira ustrezni žeton piškotka, nato pa se neposredno vrne kos HTML kode s skritim poljem vrednosti žetona obrazca, vrnjena vrednost pa bo v tej obliki:
<vhodno ime="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Ime skritega polja je običajno fiksirano na "__RequestVerificationToken", vrednost pa je šifrirani varnostni žeton. To skrito polje je običajno vključeno v obrazec za oddajo, končna oddaja pa se preveri z žetonom piškotka.
Če uporabite metodo GetTokens, lahko pridobite šifrirano obliko in žeton piškotka po posredovanju ustreznih parametrov, vendar morate tukaj ustrezne vrednosti shraniti sami.
Nato bomo predstavili metodo ročnega posodabljanja AntiForgeryToken, predvsem preko AJAX-a.
Koda paketa:
Testna koda:
Ugotovili smo, da se ob pošiljanju ajax zahteve samodejno vključijo __RequestVerificationToken parametri, kot je prikazano na spodnji sliki:
|