Что ж, сегодня мы рассмотрим тип нарушения безопасности в веб-приложении, которое называется «Подделка межсайтовых запросов» или «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