Почему __RequestVerificationToken не найден в Mono 4.2.2

Приложение ASP.NET MVC4 использует защиту от подделок на разных сайтах в соответствии с документом MVC4.

В форме есть скрытая переменная

...

и печенье

Browsers posts cookie

__RequestVerificationToken

Обработчик метода Post украшен

[HttpPost,ValidateAntiForgeryToken]

Атрибуты. Протокол https установлен. Раньше работало. После обновления приложения в форме отправки в некоторых случаях возникает исключение

    System.Web.Mvc.HttpAntiForgeryException
    The required anti-forgery cookie "__RequestVerificationToken" is not present.

Description: HTTP 500.Error processing request.
Details: Error processing request.
Exception stack trace:
  at System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens (System.Web.HttpContextBase httpContext, IIdentity identity, System.Web.Helpers.AntiXsrf.AntiForgeryToken sessionToken, System.Web.Helpers.AntiXsrf.AntiForgeryToken fieldToken) <0x4098fc20 + 0x003af> in <filename unknown>:0 
  at System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate (System.Web.HttpContextBase httpContext) <0x4098e540 + 0x00092> in <filename unknown>:0 
  at System.Web.Helpers.AntiForgery.Validate () <0x4098e490 + 0x0006f> in <filename unknown>:0 
  at System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization (System.Web.Mvc.AuthorizationContext filterContext) <0x4098e420 + 0x0002b> in <filename unknown>:0 
  at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters (System.Web.Mvc.ControllerContext controllerContext, IList`1 filters, System.Web.Mvc.ActionDescriptor actionDescriptor) <0x41389eb0 + 0x00097> in <filename unknown>:0 
  at System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass25.<BeginInvokeAction>b__1e (System.AsyncCallback asyncCallback, System.Object asyncState) <0x4138957

как это исправить, чтобы можно было использовать токен проверки запроса?


person Andrus    schedule 28.12.2015    source источник


Ответы (1)


Из вашего описания вы сообщаете методу Action проверить токен, но ваша форма не отправляет его, поэтому отсутствует __RequestVerificationToken

__RequestVerificationToken создается путем вызова вспомогательного метода @Html.AntiForgeryToken() в форме

Например:

@using (Html.BeginForm("Manage", "Account")) { @Html.AntiForgeryToken() }

для получения дополнительной информации см.: http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks

person Alan Tsai    schedule 29.12.2015
comment
Это присутствует. Это исключение встречается только у некоторых броузеров. Сервер работает в Debian и Это начало происходить после обновления до Mono 4.2.2. В более ранней версии Mono этого не происходит. - person Andrus; 29.12.2015
comment
__RequestVerificationToken файл cookie присутствует в ответ. Такое впечатление, что новый Mono его не находит - person Andrus; 29.12.2015