Що таке CSRF?
CSRF (Cross-site request forgery), також відомий як атака/сесійний рейдинг, китайське скорочення: CSRF/XSRF. CSRF (Crosssite 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 параметри, як показано на рисунку нижче:
|