Для чего нужна вспомогательная функция Html.AntiForgeryToken? - PullRequest
10 голосов
/ 18 октября 2010

Может кто-нибудь рассказать мне об этом подробнее?

Ответы [ 5 ]

17 голосов
/ 18 октября 2010

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

Здесь есть хорошее описание, которое именно то, о чем вы спрашиваете https://blogs.msmvps.com/luisabreu/blog/2009/02/09/the-mvc-platform-the-new-anti-forgery-token/

6 голосов
/ 18 октября 2010

Использование AntiForgeryToken помогает противостоять подделкам межсайтовых запросов атак.

Когда вы используете его, ваша форма будет содержать скрытое поле, и соответствующий cookie также будет установлен вв браузере.

Затем, когда форма отправлена, скрытое поле проверяется по значению cookie (при условии, что используется ValidateAntiForgeryTokenAttribute): если поле и cookie совпадают, то публикация формы, вероятно, является подлинной;если нет, то, вероятно, нет.(Злоумышленник, пытающийся выполнить CSRF-атаку, может подделать скрытое поле, но он также не должен подделать соответствующее значение cookie.)

3 голосов
/ 04 января 2017

Что ж, сегодня мы рассмотрим тип нарушения безопасности в веб-приложении, которое называется «Подделка межсайтовых запросов» или «CSRF-хакерство». CSRF - менее известная двоюродная сестра XSS. Подделка запросов к сайту - это разновидность взлома, когда хакер использует доверие пользователя к веб-сайту.

Простой способ сделать это - использовать атрибут токена ValidateAnitForgery в методе последующего действия ProductDetails следующим образом

[HttpPost]
[Authorize(Roles = "Admins")]
[ValidateAntiForgeryToken()]
public ActionResult Edit(ProductDetails productdetails)
{
  if (ModelState.IsValid)
  {
    db.Entry(productdetails).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
 }
 return View(productdetails);
}

Чтобы сгенерировать AntiForgeryToken и Cookie на стороне клиента, мы объявляем его следующим образом в HTML-форме в Edit.cshtml

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<fieldset>
    <legend>ProductDetails</legend>

Это гарантирует, что форма, отправляемая на сервер, действительно была сгенерирована тем же сервером. Таким образом, поддельные формы, которые не имеют AntiForgeryToken с правильного сервера, будут отклонены.

Также см. Простой пример здесь

https://github.com/devcurry/mvc101-anti-forgery-token

1 голос
/ 17 марта 2019

для получения дополнительной информации я думаю, что эта короткая рукопись может помочь:

Клиент запрашивает HTML-страницу, которая содержит форму.Сервер включает в себя два токена в ответе.Один токен отправляется как cookie.Другой помещен в скрытое поле формы.Токены генерируются случайным образом, поэтому противник не может угадать значения.клиент отправляет форму, он должен отправить оба токена обратно на сервер.Клиент отправляет маркер cookie в виде куки, и он отправляет маркер формы внутри данных формы.(Клиент браузера автоматически делает это, когда пользователь отправляет форму.) Запрос не включает оба токена, сервер отклоняет запрос.

1 голос
/ 18 октября 2010

В общем случае токен защиты от подделки представляет собой скрытый HTML-ввод, который отображается для предотвращения атак CSRF. В целом, он работает путем сравнения значения, которое сервер отправил клиенту, с тем, что клиент отправляет обратно на почту. Это все, что вы ищете?

Возможно, вам следует проверить MSDN для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...