Чи можете ви пояснити мету ValidateAntiForgeryToken і показати мені приклад про ValidateAntiForgeryToken
MVC 4?
Я не міг знайти прикладів, які пояснювали б цей атрибут?
.BeginForm
помічник. Тож ця річ є автоматично, як у Rails
Чи можете ви пояснити мету ValidateAntiForgeryToken і показати мені приклад про ValidateAntiForgeryToken
MVC 4?
Я не міг знайти прикладів, які пояснювали б цей атрибут?
.BeginForm
помічник. Тож ця річ є автоматично, як у Rails
Відповіді:
Підтримка захисту від підробки MVC записує унікальне значення для файлу cookie, призначеного лише для HTTP, і тоді те саме значення записується у форму. Під час подання сторінки виникає помилка, якщо значення файлу cookie не відповідає значенню форми.
Важливо зауважити, що ця функція запобігає підробці запитів між веб-сайтами . Тобто форма з іншого сайту, яка публікує на ваш сайт у спробі подати прихований вміст, використовуючи автентифіковані облікові дані користувача. Атака передбачає обманутого користувача, який увійшов, щоб подати форму, або просто програмно запустивши форму, коли сторінка завантажується.
Ця функція не перешкоджає будь-якому іншому типу підробки даних або нападів на основі підробки.
Щоб використовувати його, прикрасьте ValidateAntiForgeryToken
атрибут методу дії чи контролера та розмістіть виклик @Html.AntiForgeryToken()
у формах, які розміщують метод.
Основне призначення атрибута 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()
У 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
Корпорація Майкрософт надає нам вбудовану функціональність, яку ми використовуємо в нашому додатку з метою безпеки, тому ніхто не може зламати наш сайт або вторгнутись у критичну інформацію.
З метою використання ValidateAntiForgeryToken у програмі MVC від Harpreet Singh:
Використання ValidateAntiForgeryToken
Спробуємо на простому прикладі зрозуміти це поняття. Я не хочу робити це занадто складно, тому я збираюся використовувати шаблон програми MVC, вже доступний у Visual Studio. Ми зробимо це крок за кроком. Давайте розпочнемо.
Крок 1 - Створіть два програми MVC із шаблоном інтернету за замовчуванням та вкажіть ці імена відповідно CrossSite_RequestForgery та Attack_Application.
Тепер відкрийте веб-конфігурацію додатка CrossSite_RequestForgery та змініть рядок з'єднання з наведеною нижче, а потім збережіть.
`
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF; Integrated Security=true;" providerName="System.Data.SqlClient" /> </connectionStrings>
Тепер натисніть Інструменти >> NuGet Package Manager, потім консоль диспетчера пакунків
Тепер запустіть наведені нижче три команди в консолі диспетчера пакунків, щоб створити базу даних.
Перше оновлення бази даних для додавання-міграції увімкнення
Важливі примітки. Я створив базу даних з кодом першого підходу, тому що я хочу зробити цей приклад у процесі роботи розробників. Базу даних також можна створити вручну. Це твій вибір.
- Тепер відкрийте контролер акаунта. Тут ви побачите метод реєстрації, тип якого - пост. Над цим методом повинен бути атрибут, доступний як [ValidateAntiForgeryToken]. Прокоментуйте цей атрибут. Тепер клацніть правою кнопкою миші на реєстрації та натисніть Перейти. Знову ви знайдете помічник html як @ Html.AntiForgeryToken (). Прокоментуйте також це. Запустіть програму та натисніть кнопку зареєструватися. URL-адреса буде відкрита як:
http: // localhost: 52269 / Рахунок / Реєстрація
Примітки. Я знаю, що зараз питання, що виникають у всіх читачах, полягає в тому, чому цих двох помічників потрібно коментувати, оскільки всі знають, що вони використовуються для перевірки запиту. Тоді я просто хочу повідомити всім, що це лише тому, що я хочу показати різницю після і перед застосуванням цих помічників.
Тепер відкрийте другу програму - Attack_Application. Потім відкрийте метод «Реєстрація» Контролера облікових записів. Просто змініть метод POST на простий, показаний нижче.
Реєстраційний формуляр
- @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
- @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
- @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)
7. Тепер, припустимо, ви хакер і знаєте URL-адресу, звідки можете зареєструвати користувача в додатку CrossSite_RequestForgery. Тепер ви створили сайт підробки як Attacker_Application і просто вписали ту саму URL-адресу в метод публікації.
8.Запустіть цю програму зараз і заповніть поля реєстру та натисніть на регістр. Ви побачите, що ви зареєстровані в додатку CrossSite_RequestForgery. Якщо ви перевірите базу даних програми CrossSite_RequestForgery, ви побачите та введені вами записи.
- Важливо - Відкрийте додаток CrossSite_RequestForgery і прокоментуйте маркер у Контролері облікових записів та зареєструйте Перегляд. Спробуйте зареєструватися ще раз тим самим процесом. Тоді відбудеться помилка, як показано нижче.
Помилка серверу в програмі '/' ________________________________________ Немає необхідного файлу cookie "__RequestVerificationToken" для підробки.
Про це говорить концепція. Що ми додаємо у View, тобто @ Html.AntiForgeryToken () генерує __RequestVerificationToken під час завантаження та [ValidateAntiForgeryToken], доступний методом Controller. Зрівняйте цей маркер на час публікації. Якщо маркер такий же, це означає, що це дійсний запит.