ValidateAntiForgeryToken цель, пояснение и пример

Не могли бы вы объяснить ValidateAntiForgeryToken цель и показать мне пример о ValidateAntiForgeryToken в MVC 4?

Я не мог найти примеров, объясняющих этот атрибут?

Ответ 1

Поддержка анти-подделки MVC записывает уникальное значение в cookie только для HTTP, а затем в форму записывается одно и то же значение. Когда страница отправляется, возникает ошибка, если значение cookie не соответствует значению формы.

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

Эта функция не препятствует другим типам подделки данных или атак, основанных на подделке.

Чтобы использовать его, украсьте метод действия или контроллер атрибутом ValidateAntiForgeryToken и поместите вызов @Html.AntiForgeryToken() в публикации форм для метода.

Ответ 2

Основное назначение атрибута 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()

Ответ 3

Microsoft предоставляет нам встроенную функциональность, которую мы используем в нашем приложении в целях безопасности, поэтому никто не может взломать наш сайт или проникнуть в какую-либо важную информацию.

Из Цель ValidateAntiForgeryToken в приложении MVC Харприта Сингха:

Use of ValidateAntiForgeryToken

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

  1. Шаг 1 - Создайте два приложения MVC с интернет-шаблоном по умолчанию и присвойте им имена CrossSite_RequestForgery и Attack_Application соответственно.

  2. Теперь откройте приложение Web Config приложения CrossSite_RequestForgery и измените строку подключения на приведенную ниже, а затем сохраните.

'

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

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

Enable-Migrations add-migration first update-database

Важные примечания - Я создал базу данных с подходом кода первым потому что я хочу сделать этот пример в том, как работают разработчики. Вы Можно также создать базу данных вручную. Это ваш выбор.

  1. Теперь откройте Account Controller. Здесь вы увидите метод register, тип которого post. Над этим методом должен быть атрибут доступны как [ValidateAntiForgeryToken]. Прокомментируйте этот атрибут. В настоящее время, щелкните правой кнопкой мыши на регистрации и нажмите Перейти. Там снова, вы будете найти помощника HTML как @Html.AntiForgeryToken(). Комментарий этот также. Запустите приложение и нажмите кнопку регистрации. URL будет быть открытым как:

http://localhost:52269/Account/Register

Примечания. Теперь я знаю, что у всех читателей возникает вопрос: почему эти два помощника должны быть прокомментированы? используются для проверки запроса. Тогда я просто хочу, чтобы вы все знали что это только потому, что я хочу показать разницу после и перед применением этих помощников.

  1. Теперь откройте второе приложение Attack_Application. Затем откройте метод Register Account Controller. Просто поменяйте ПОСТ метод с простым, показанным ниже.

                      Форма регистрации         
    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. Сопоставьте этот токен на время публикации. Если токен одинаков, значит это действительный запрос.