Что такое 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 формы и токены cookie автоматически генерируются по умолчанию, когда @Html.AntiForgeryToken() используется на странице просмотра. Однако, если мы хотим получить ручное извлечение в фоновом режиме, нам нужно использовать класс System.Web.Helpers.AntiForgery, и друзья, заинтересованные в просмотре исходного кода, обнаружат, что на самом деле внутренний вызов @Html.AntiForgeryToken() совпадает с методом вызова класса AntiForgery.
Он в основном используется для получения соответствующей формы и токена cookie двумя статическими методами: AntiForgery.GetHtml() или AntiForgery.GetTokens (строка oldCookieToken, выход строки newCookieToken, выход строки formToken). Однако следует отметить, что после вызова метода GetHtml соответствующий токен cookie будет автоматически генерироваться, и затем фрагмент HTML-кода с скрытым полем значения токена формы возвращается напрямую, и возвращаемое значение будет в такой форме:
<input name="__RequestVerificationToken" type="hidden" value="8_nUk_3z0svQr9qcvRBi9SWMZ2-SYmuy9kRe9OgRobGULkb2Z4JZxRZFhR0ndeoy9hmDLDru7MFk-W4xrnL5z5T6VbkfXK7fyRk-egQBGm41"> Имя скрытого поля обычно фиксируется на «__RequestVerificationToken», а значение представляет собой зашифрованный токен безопасности. Это скрытое поле обычно помещается в форму для отправки, а финальная заявка проверяется по токену cookie.
Если использовать метод GetTokens, можно получить зашифрованную форму и токен cookie после передачи соответствующих параметров, но здесь нужно сохранять соответствующие значения самостоятельно.
Далее мы представим метод ручного обновления AntiForgeryToken, главным образом через AJAX.
Код упаковки:
Тестовый код:
Мы обнаружили, что при отправке ajax-запроса __RequestVerificationToken параметры автоматически включаются, как показано на рисунке ниже:
|