Исключение проверки запроса ASP.NET, даже если проверка отключена - PullRequest
3 голосов
/ 19 августа 2010

Я использую ASP.NET MVC 2, .NET 4.0.

У меня есть контроллер, который отключает проверку запроса:

[AcceptVerbs("POST")]
[ValidateInput(false)]
public ActionResult Add(string userId, FormCollection formValues)
{
    //...
}

и я все еще получаю HttpRequestValidationException, когда POST содержит HTML:

System.Web.HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (ThisWeek="").
   at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
   at System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection)
   at System.Web.HttpRequest.get_Form()
   at System.Web.Mvc.HttpRequestExtensions.GetHttpMethodOverride(HttpRequestBase request)
   at System.Web.Mvc.AcceptVerbsAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
   at System.Linq.Enumerable.All[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Web.Mvc.ActionMethodSelector.RunSelectionFilters(ControllerContext controllerContext, List`1 methodInfos)
   at System.Web.Mvc.ReflectedControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, String actionName)
   at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.Controller.ExecuteCore()
   at System.Web.Mvc.MvcHandler.c__DisplayClass8.b__4()
   at System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass1.b__0()
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

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

Недавно мы перешли на MVC2 и .NET 4, и это начало появляться. Из трассировки стека видно, что проверка происходит как часть обработки новой поддержки переопределений метода HTTP (создание POST, похожего на PUT или DELETE, путем включения специально названного скрытого ввода). Но я не знаю, как сказать этой подсистеме прекратить проверку ввода.

Что мне нужно сделать, чтобы сделать эту работу?

Ответы [ 2 ]

4 голосов
/ 19 августа 2010

Да .NET4 немного повысил безопасность . Вы можете вернуть его в режим .NET2 в файле web.config следующим образом:

<system.web>
  <httpRuntime requestValidationMode="2.0"/>
</system.web>
4 голосов
/ 19 августа 2010

Добавьте это в system.web раздел вашего web.config:

<httpRuntime requestValidationMode="2.0" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...