Vad är CSRF?
CSRF (Cross-site request forgery), även känt som one click attack/session riding, kinesisk förkortning: CSRF/XSRF. CSRF (Cross Site Request Forgery) är en nätverksattackmetod som listades som en av de 20 största säkerhetsriskerna på Internet år 2007. Andra säkerhetsrisker, såsom SQL-skriptinjektion och cross-site domänskriptattacker, har blivit välkända de senaste åren, och många webbplatser har försvarat sig mot dem. CSRF är dock fortfarande ett främmande begrepp för de flesta. Även den mest kända Gmail hade en CSRF-sårbarhet i slutet av 2007, som hackades och orsakade stora förluster för Gmail-användare.
Vad kan CSRF göra?
Du kan förstå CSRF-attacker som dessa: en angripare har stulit din identitet och skickat illvilliga förfrågningar i ditt namn. CSRF kan göra saker som att skicka e-post, skicka meddelanden, stjäla ditt konto eller till och med köpa varor och överföra virtuell valuta åt dig...... De problem som orsakas inkluderar: läckage av personlig integritet och säkerhet på egendomen.
ASP.NET MVC AntiForgeryToken anti-förfalskningsmärke
I ASP.NET MVC genereras formulärtokens och cookie-tokens automatiskt som standard när @Html.AntiForgeryToken() används på visningssidan. Men om vi vill uppnå manuell hämtning i bakgrunden måste vi använda klassen System.Web.Helpers.AntiForgery, och vänner som är intresserade av att se källkoden kommer att upptäcka att metoden för intern anrop av @Html.AntiForgeryToken() faktiskt är densamma som för AntiForgery-klassen.
Den används främst för att erhålla motsvarande formulär och cookie-token genom två statiska metoder: AntiForgery.GetHtml() eller AntiForgery.GetTokens(sträng oldCookieToken, utsträng newCookieToken, utsträng formToken). Det bör dock noteras att när GetHtml-metoden anropas, genereras den motsvarande cookie-token automatiskt, och sedan returneras en HTML-kod med formulärtokenvärdet dolt direkt och det returnerade värdet i denna form:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Namnnamnet på det dolda fältet är vanligtvis fast till "__RequestVerificationToken", och värdet är en krypterad säkerhetstoken. Detta dolda fält placeras vanligtvis i formuläret som ska skickas in, och den slutliga insändningen verifieras mot cookietokenen.
Om du använder GetTokens-metoden kan du få tag på det krypterade formuläret och cookie-token efter att ha skickat in motsvarande parametrar, men här måste du lagra motsvarande värden själv.
Därefter kommer vi att introducera metoden för manuell uppdatering av AntiForgeryToken, främst via AJAX.
Paketkod:
Testkod:
Vi fann att när man skickar en ajax-förfrågan inkluderas __RequestVerificationToken parametrar automatiskt, som visas i figuren nedan:
|