Ce este CSRF?
CSRF (Cross-site request forgery), cunoscut și sub denumirea de atac cu un click/session riding, abreviere chineză: CSRF/XSRF. CSRF (Cross Site Request Forgery) este o metodă de atac în rețea care a fost listată printre cele mai mari 20 de riscuri de securitate de pe Internet în 2007. Alte riscuri de securitate, precum injectarea de scripturi SQL și atacurile cross-site de scripturi de domeniu, au devenit bine cunoscute în ultimii ani, iar multe site-uri web s-au apărat împotriva acestora. Totuși, CSRF este încă un concept străin pentru majoritatea oamenilor. Chiar și cel mai faimos Gmail a avut o vulnerabilitate CSRF la sfârșitul anului 2007, care a fost spart și a cauzat pierderi uriașe utilizatorilor Gmail.
Ce poate face CSRF?
Poți înțelege astfel de atacuri CSRF: un atacator ți-a furat identitatea și a trimis cereri malițioase în numele tău. CSRF poate face lucruri precum trimiterea de emailuri, mesajele, furtul contului tău sau chiar cumpărarea de bunuri și transferul de monedă virtuală în numele tău...... Problemele cauzate includ: scurgeri de confidențialitate personală și securitatea proprietății.
ASP.NET Marca anti-falsificare MVC AntiForgeryToken
În ASP.NET MVC, tokenurile de formular și tokenurile de cookie-uri sunt generate automat implicit ori de câte ori se folosește @Html.AntiForgeryToken() pe pagina de vizualizare. Totuși, dacă vrem să obținem recuperarea manuală în fundal, trebuie să folosim clasa System.Web.Helpers.AntiForgery, iar prietenii interesați să vizualizeze codul sursă vor descoperi că, de fapt, metoda de apel intern a @Html.AntiForgeryToken() este aceeași ca cea a clasei AntiForgery.
Este folosit în principal pentru a obține formularul corespunzător și tokenul de cookie prin două metode statice: AntiForgery.GetHtml() sau AntiForgery.GetTokens (string oldCookieToken, out string newCookieToken, out string formToken). Totuși, trebuie menționat că, odată ce metoda GetHtml este apelată, tokenul cookie corespunzător va fi generat automat, iar apoi o bucată de cod HTML cu câmpul token de formular ascuns va fi returnată direct, iar valoarea returnată va fi în acest formular:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Numele câmpului ascuns este, în general, fixat la "__RequestVerificationToken", iar valoarea este un token de securitate criptat. Acest câmp ascuns este de obicei plasat în formularul care urmează să fie trimis, iar trimiterea finală este verificată în raport cu tokenul cookie.
Dacă folosești metoda GetTokens, poți obține formularul criptat și tokenul cookie după ce ai introdus parametrii corespunzători, dar aici trebuie să stochezi valorile corespunzătoare tu însuți.
În continuare, vom introduce metoda de actualizare manuală a AntiForgeryToken, în principal prin AJAX.
Cod de pachet:
Cod de test:
Am constatat că atunci când se trimite o cerere ajax, parametrii __RequestVerificationToken sunt incluși automat, așa cum se arată în figura de mai jos:
|