Wat is CSRF?
CSRF (Cross-site request forgery), ook bekend als one click attack/session riding, Chinese afkorting: CSRF/XSRF. CSRF (Cross Site Request Forgery) is een netwerkaanvalmethode die in 2007 werd genoemd als een van de top 20 beveiligingsrisico's op het internet. Andere beveiligingsrisico's, zoals SQL-scriptinjectie en cross-site domein scriptaanvallen, zijn de afgelopen jaren bekend geworden, en veel websites hebben zich daartegen verdedigd. CSRF is echter voor de meeste mensen nog steeds een vreemd concept. Zelfs de bekendste Gmail had eind 2007 een CSRF-kwetsbaarheid, die werd gehackt en enorme verliezen veroorzaakte voor Gmail-gebruikers.
Wat kan CSRF doen?
Je kunt CSRF-aanvallen als deze begrijpen: een aanvaller heeft je identiteit gestolen en kwaadaardige verzoeken op jouw naam gestuurd. CSRF kan bijvoorbeeld e-mails versturen, berichten sturen, je account stelen of zelfs goederen kopen en virtueel geld overmaken namens jou...... De veroorzaakte problemen zijn onder andere: persoonlijke privacy en de beveiliging van eigendommen.
ASP.NET MVC AntiForgeryToken anti-vervalsingsmerk
In ASP.NET MVC worden formuliertokens en cookietokens standaard automatisch gegenereerd wanneer @Html.AntiForgeryToken() wordt gebruikt op de weergavepagina. Als we echter handmatig ophalen op de achtergrond willen bereiken, moeten we de System.Web.Helpers.AntiForgery-klasse gebruiken, en vrienden die geïnteresseerd zijn in het bekijken van de broncode zullen merken dat de interne aanroepmethode van @Html.AntiForgeryToken() in feite hetzelfde is als die van de AntiForgery-klasse.
Het wordt voornamelijk gebruikt om het bijbehorende formulier en cookietoken te verkrijgen via twee statische methoden: AntiForgery.GetHtml() of AntiForgery.GetTokens(string oldCookieToken, out string newCookieToken, out string formToken). Het moet echter worden opgemerkt dat zodra de GetHtml-methode is aangeroepen, het bijbehorende cookietoken automatisch wordt gegenereerd, en vervolgens wordt een stuk HTML-code met het verborgen veld van de vorm tokenwaarde direct teruggegeven, en de geretourneerde waarde zal in deze vorm zijn:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> De naamsnaam van het verborgen veld wordt meestal vastgelegd op "__RequestVerificationToken", en de waarde is een versleuteld beveiligingstoken. Dit verborgen veld wordt meestal in het te dienen formulier geplaatst, en de uiteindelijke inzending wordt verifiërd met het cookietoken.
Als je de GetTokens-methode gebruikt, kun je het versleutelde formulier en cookietoken verkrijgen nadat je de bijbehorende parameters hebt doorgegeven, maar hier moet je de bijbehorende waarden zelf opslaan.
Vervolgens introduceren we de methode om AntiForgeryToken handmatig bij te werken, voornamelijk via AJAX.
Pakketcode:
Testcode:
We ontdekten dat bij het verzenden van een ajax-verzoek __RequestVerificationToken parameters automatisch worden opgenomen, zoals te zien is in de onderstaande figuur:
|