Какво е CSRF?
CSRF (Cross-site request forgery), известен още като еднопосочна атака/сесия, китайско съкращение: CSRF/XSRF. CSRF (Cross Site Request Forgery) е метод за мрежова атака, който през 2007 г. беше включен сред 20-те най-големи рискове за сигурността в Интернет. Други рискове за сигурността, като инжектиране на SQL скриптове и атаки с различни домейн скриптове, станаха добре известни през последните години и много уебсайтове се защитават срещу тях. Въпреки това, CSRF все още е чуждо понятие за повечето хора. Дори най-известният Gmail имаше уязвимост CSRF в края на 2007 г., която беше хакната и причини огромни загуби на потребителите на Gmail.
Какво може да направи CSRF?
Можете да разберете CSRF атаките по следния начин: нападател е откраднал вашата самоличност и е изпратил злонамерени заявки от ваше име. CSRF може да прави неща като изпращане на имейли, съобщения, кражба на акаунта ви или дори да купува стоки и да прехвърля виртуална валута от ваше име...... Причинените проблеми включват: изтичане на лична поверителност и сигурност на имуществото.
ASP.NET MVC AntiForgeryToken марка срещу фалшифициране
В ASP.NET MVC, формовите токени и бисквитките се генерират автоматично по подразбиране, когато @Html.AntiForgeryToken() се използва в страницата за изглед. Въпреки това, ако искаме да постигнем ръчно извличане във фонов режим, трябва да използваме класа System.Web.Helpers.AntiForgery, а приятели, които се интересуват от изходния код, ще открият, че всъщност методът на вътрешно извикване на @Html.AntiForgeryToken() е същият като този на класа AntiForgery.
Основно се използва за получаване на съответната форма и токена на бисквитките чрез два статични метода: AntiForgery.GetHtml() или AntiForgery.GetTokens (string oldCookieToken, изход на string newCookieToken, изход низ formToken). Въпреки това, трябва да се отбележи, че след като методът GetHtml бъде извикан, съответният токен за бисквитки се генерира автоматично, след което парче HTML код с скрито поле за стойност на токена ще бъде върнат директно, като върнатата стойност ще бъде в тази форма:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Името на скритото поле обикновено е фиксирано на "__RequestVerificationToken", а стойността е криптиран токен за сигурност. Това скрито поле обикновено се поставя във формата за подаване, а крайното подаване се проверява спрямо токена за бисквитки.
Ако използвате метода GetTokens, можете да получите криптираната форма и токена на бисквитките след като въведете съответните параметри, но тук трябва сами да съхранявате съответните стойности.
След това ще въведем метода за ръчно обновяване на AntiForgeryToken, главно чрез AJAX.
Код на пакета:
Тестов код:
Открихме, че при изпращане на ajax заявка __RequestVerificationToken параметри се включват автоматично, както е показано на фигурата по-долу:
|