Исключение для проверки запросов MVC 2 и ASP.NET 4 - PullRequest
3 голосов
/ 30 августа 2010

Я работаю над приложением, которое я унаследовал от другого магазина разработчика, который недавно обновил до MVC2 / .NET 4 из MVC 1 / .NET 2 / 3.5.Все работает нормально, за исключением одной страницы.На этой странице есть iframe, который загружает экземпляр TinyMCE и позволяет встроенное редактирование некоторых шаблонов HTML.На странице хостинга есть событие JavaScript, связанное с кнопкой отправки, которая при нажатии захватывает значение innerHtml iframe, преобразует его в JSON и помещает в скрытое поле формы.

При отправке формы я получаю печально известное «Обнаружено потенциально опасное значение Request.Form ...» Теперь я последовал официальному документу Microsoft и добавил

<httpRuntime requestValidationMode="2.0" />

к моему web.config иукрасил мой контроллер

[ValidateInput(false)]

И я все еще получаю эту ошибку. Соответствующий стек ниже.

 [HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (HtmlContent="...orrectly? <a href=\"*|ARCHIVE|...").]
 System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8730676
 System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122
 System.Web.HttpRequest.get_Form() +114
 System.Web.HttpRequestWrapper.get_Form() +11
 System.Web.Mvc.HttpRequestExtensions.GetHttpMethodOverride(HttpRequestBase request) +235
 System.Web.Mvc.AcceptVerbsAttribute.IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) +119         
 System.Web.Mvc.<>c__DisplayClass11.<RunSelectionFilters>b__d(ActionMethodSelectorAttribute attr) +57
 System.Linq.Enumerable.All(IEnumerable`1 source, Func`2 predicate) +145
 System.Web.Mvc.ActionMethodSelector.RunSelectionFilters(ControllerContext controllerContext, List`1 methodInfos) +524
 System.Web.Mvc.ActionMethodSelector.FindActionMethod(ControllerContext controllerContext, String actionName) +122
 System.Web.Mvc.ReflectedControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName) +182
 System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, String actionName) +47
 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +283
 System.Web.Mvc.Controller.ExecuteCore() +136
 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +111
 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +39
 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +65
 System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +44
 System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +42
 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +140
 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +54
 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +52
 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8836913
 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

Интересно, что если я перехватываю метод BeginRequest в Global.asaxчто, по-видимому, указывает на то, что код выполняется в режиме проверки запросов в режиме 2.0, поскольку, если мое понимание проверки запросов в .NET 4s является правильным, я не смог бы получить доступ к этому методу, если код выполнялся в рамках модели проверки 4.0поскольку он обрабатывает все до BeginRequest.

Теперь я смог обойти эту проблему, вызвав escape () из функции JavaScript для значения поля скрытой формы, но это, очевидно, хак.еще не сталкивался с этой проблемой или у меня есть идеи, как правильно отключить проверку запросов fили этот метод на моем контроллере?

Спасибо!

1 Ответ

0 голосов
/ 17 июня 2011

Проверьте, выглядит ли ваш раздел "pages" в web.config:

<pages validateRequest="false" ...>...</pages>

, если не попытаетесь добавить атрибут validateRequestЭто работает для меня, потому что у меня была такая же проблема несколько месяцев назад.

edit: lol, я не видел, что это такой старый пост.но я оставляю свой ответ, потому что, может быть, это помогает кому-то еще

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