2016-04-27 2 views
1

Так что мне было интересно, насколько важна функция antiForegryToken, потому что это вызывает некоторые проблемы для меня.Что касается @ Html.AntiForgeryToken()

У меня есть класс, где я смотрю, является ли пользователь роли «PremiumAnvändare» (это PremiumUser в шведском), и если нет, я перенаправляю их на «rolenotfound».

public ActionResult Create() 
    { 

     if (User.IsInRole("PremiumAnvändare")) 
     { 
      ViewBag.SammanhangsID = new SelectList(db.Sammanhangs, "SammanhangsID", "Namn"); 
      return View(); 


     } 
     Response.Redirect("rolenotfound"); 
     return View(); 
    } 

Но когда пользователь перенаправляется на rolenotfound я получаю ошибку

Исключение типа «System.Web.HttpException» произошло в System.Web.dll, но не обрабатывается пользователем код

Сервер не может добавить заголовок после отправки HTTP-заголовков.

Это решается путем вычеркивания @ Html.AntiForgeryToken()

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

+0

Это зависит от того, хотите ли вы CSRF-защиту или нет –

+0

Являются ли эти атаки распространенными? –

+0

Это зависит от того, насколько вероятна и привлекательна цель вашего сайта и ваших пользователей. Проверьте [Подпрограмма запроса на межсайтовый поиск по оквас] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF)). –

ответ

0

Я решил, изменив

Response.Redirect("rolenotfound"); 
     return View(); 

в

return PartialView("rolenotfound"); 

это не мешает мне с помощью анти-маркера подделки, однако расположение не входит в данном случае, но это не будет быть проблемой в моем проекте.

0

Я думаю, что проблема заключается в том, что вы не заканчиваете свой ответ после перенаправления. Разница между Response.Redirect("rolenotfound"); и Response.Redirect("rolenotfound", true); такова, что вторая будет прервать поток и предотвратить выполнение return View();.

Я предполагаю, что хотя перенаправление выполняется, return View(); выполнит и выбросит System.Web.HttpException.

CSRF довольно распространены на мой взгляд (по крайней мере, если у вас есть приложение, привлекательное для злоумышленников), но никто не скажет вам, нужна ли вам такая защита или нет - вам нужно самостоятельно решать.