ValidateAntiForgeryЗавдання мети, пояснення та приклад


310

Чи можете ви пояснити мету ValidateAntiForgeryToken і показати мені приклад про ValidateAntiForgeryTokenMVC 4?

Я не міг знайти прикладів, які пояснювали б цей атрибут?


8
Перевірте цю публікацію prideparrot.com/blog/archive/2012/7/…
VJAI

1
До речі, я насправді не розумію, чому MS не дозволили помістити це прямо у .BeginFormпомічник. Тож ця річ є автоматично, як у Rails
jazzcat

Відповіді:


350

Підтримка захисту від підробки MVC записує унікальне значення для файлу cookie, призначеного лише для HTTP, і тоді те саме значення записується у форму. Під час подання сторінки виникає помилка, якщо значення файлу cookie не відповідає значенню форми.

Важливо зауважити, що ця функція запобігає підробці запитів між веб-сайтами . Тобто форма з іншого сайту, яка публікує на ваш сайт у спробі подати прихований вміст, використовуючи автентифіковані облікові дані користувача. Атака передбачає обманутого користувача, який увійшов, щоб подати форму, або просто програмно запустивши форму, коли сторінка завантажується.

Ця функція не перешкоджає будь-якому іншому типу підробки даних або нападів на основі підробки.

Щоб використовувати його, прикрасьте ValidateAntiForgeryTokenатрибут методу дії чи контролера та розмістіть виклик @Html.AntiForgeryToken()у формах, які розміщують метод.


5
@Chris Це і те, і інше. Відповідно до моєї відповіді: "записує унікальне значення для файлу cookie, що містить лише HTTP, і тоді те саме значення записується у форму "
Richard Szalay

21
Чому цей параметр не встановлений за замовчуванням?
Крістіан Хагелід

12
@Christian тому, що це не Ruby on Rails. ;-)
Мартін Каподічі

6
Здається, що форма __RequestVerificationToken і cookie __RequestVerificationToken не однакові, вони працюють як пара.
WaiKit Kung

5
@rdans Зовсім не, CORS та CSRF зовсім інші. CORS призначений для дозволу іншим доменам отримувати доступ до API на вашому сервері.
Річард Шалай

52

Основне призначення атрибута ValidateAntiForgeryToken - запобігати атакам підробки між сайтом.

Підробка запиту між веб-сайтом - це атака, при якій шкідливий елемент сценарію, шкідливі команди чи код надсилаються з браузера надійного користувача. Для отримання додаткової інформації про це відвідайте http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages .

Простий у використанні, вам потрібно прикрасити метод атрибутом ValidateAntiForgeryToken, як показано нижче:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult CreateProduct(Product product)  
{
  if (ModelState.IsValid)  
  {
    //your logic 
  }
  return View(ModelName);
}

Він отриманий з простору імен System.Web.Mvc.

І на ваш погляд, додайте цей код, щоб додати маркер, щоб він використовувався для перевірки форми після подання.

@Html.AntiForgeryToken()

Так, ви праві, вам потрібно зателефонувати @ Html.AntiForgeryToken () зі своєї форми та додати ValidateAntiForgeryTokenAttribute до методу дій, який ви хочете захистити.
Chandra Malla

Дякую за цю просту для розуміння відповідь :)
noobprogrammer

4

У ASP.Net Core маркер проти підробки автоматично додається до форм, тому вам не потрібно додавати, @Html.AntiForgeryToken()якщо ви використовуєте елемент форми бритви або використовуєте IHtmlHelper.BeginForm і якщо метод форми не GET.

Він створить елемент введення для вашої форми, подібної до цієї: <input name="__RequestVerificationToken" type="hidden" value="CfDJ8HSQ_cdnkvBPo-jales205VCq9ISkg9BilG0VXAiNm3Fl5Lyu_JGpQDA4_CLNvty28w43AL8zjeR86fNALdsR3queTfAogif9ut-Zd-fwo8SAYuT0wmZ5eZUYClvpLfYm4LLIVy6VllbD54UxJ8W6FA">

І коли користувач подає форму, цей маркер перевіряється на стороні сервера, якщо включена перевірка.

[ValidateAntiForgeryToken]атрибут може бути використаний проти дій. Запити, зроблені для дій, застосованих цей фільтр, заблоковані, якщо запит не включає дійсний маркер антифабрикату.

[AutoValidateAntiforgeryToken]атрибут може використовуватися проти контролерів. Цей атрибут працює ідентично атрибуту ValidateAntiForgeryToken, за винятком того, що він не вимагає маркерів для запитів, зроблених за допомогою наступних методів HTTP: GET HEAD OPTIONS TRACE

Додаткова інформація: https://docs.microsoft.com/pl-pl/aspnet/core/security/anti-request-forgery


2

Корпорація Майкрософт надає нам вбудовану функціональність, яку ми використовуємо в нашому додатку з метою безпеки, тому ніхто не може зламати наш сайт або вторгнутись у критичну інформацію.

З метою використання ValidateAntiForgeryToken у програмі MVC від Harpreet Singh:

Використання ValidateAntiForgeryToken

Спробуємо на простому прикладі зрозуміти це поняття. Я не хочу робити це занадто складно, тому я збираюся використовувати шаблон програми MVC, вже доступний у Visual Studio. Ми зробимо це крок за кроком. Давайте розпочнемо.

  1. Крок 1 - Створіть два програми MVC із шаблоном інтернету за замовчуванням та вкажіть ці імена відповідно CrossSite_RequestForgery та Attack_Application.

  2. Тепер відкрийте веб-конфігурацію додатка CrossSite_RequestForgery та змініть рядок з'єднання з наведеною нижче, а потім збережіть.

`

<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF;
Integrated Security=true;" providerName="System.Data.SqlClient" /> 
 </connectionStrings>
  1. Тепер натисніть Інструменти >> NuGet Package Manager, потім консоль диспетчера пакунків

  2. Тепер запустіть наведені нижче три команди в консолі диспетчера пакунків, щоб створити базу даних.

Перше оновлення бази даних для додавання-міграції увімкнення

Важливі примітки. Я створив базу даних з кодом першого підходу, тому що я хочу зробити цей приклад у процесі роботи розробників. Базу даних також можна створити вручну. Це твій вибір.

  1. Тепер відкрийте контролер акаунта. Тут ви побачите метод реєстрації, тип якого - пост. Над цим методом повинен бути атрибут, доступний як [ValidateAntiForgeryToken]. Прокоментуйте цей атрибут. Тепер клацніть правою кнопкою миші на реєстрації та натисніть Перейти. Знову ви знайдете помічник html як @ Html.AntiForgeryToken (). Прокоментуйте також це. Запустіть програму та натисніть кнопку зареєструватися. URL-адреса буде відкрита як:

http: // localhost: 52269 / Рахунок / Реєстрація

Примітки. Я знаю, що зараз питання, що виникають у всіх читачах, полягає в тому, чому цих двох помічників потрібно коментувати, оскільки всі знають, що вони використовуються для перевірки запиту. Тоді я просто хочу повідомити всім, що це лише тому, що я хочу показати різницю після і перед застосуванням цих помічників.

  1. Тепер відкрийте другу програму - Attack_Application. Потім відкрийте метод «Реєстрація» Контролера облікових записів. Просто змініть метод POST на простий, показаний нижче.

    Реєстраційний формуляр
    1. @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
    2. @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
    3. @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)

7. Тепер, припустимо, ви хакер і знаєте URL-адресу, звідки можете зареєструвати користувача в додатку CrossSite_RequestForgery. Тепер ви створили сайт підробки як Attacker_Application і просто вписали ту саму URL-адресу в метод публікації.

8.Запустіть цю програму зараз і заповніть поля реєстру та натисніть на регістр. Ви побачите, що ви зареєстровані в додатку CrossSite_RequestForgery. Якщо ви перевірите базу даних програми CrossSite_RequestForgery, ви побачите та введені вами записи.

  1. Важливо - Відкрийте додаток CrossSite_RequestForgery і прокоментуйте маркер у Контролері облікових записів та зареєструйте Перегляд. Спробуйте зареєструватися ще раз тим самим процесом. Тоді відбудеться помилка, як показано нижче.

Помилка серверу в програмі '/' ________________________________________ Немає необхідного файлу cookie "__RequestVerificationToken" для підробки.

Про це говорить концепція. Що ми додаємо у View, тобто @ Html.AntiForgeryToken () генерує __RequestVerificationToken під час завантаження та [ValidateAntiForgeryToken], доступний методом Controller. Зрівняйте цей маркер на час публікації. Якщо маркер такий же, це означає, що це дійсний запит.


3
скопійовано з c-sharpcorner.com/article/…
Mohammed
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.