HttpRequestValidationException перенаправление на страницу входа (проверка подлинности форм) - PullRequest
2 голосов
/ 21 декабря 2011

В .NET 4.0 проверка запросов была на ступеньку выше! Кажется, когда какой-либо код пытается получить доступ к Request.Form, значения в форме проверяются, и генерируется исключение HttpRequestValidationException.

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

У меня есть форма, которая принимает ввод HTML (я бы не хотел, но я согласен, хорошо?). Модель редактирования для этой формы имеет атрибут [AllowHtml] в поле, поэтому отправка HTML не вызывает сложностей.

Однако, если пользователь не прошел проверку подлинности (например, истек тайм-аут его сеанса), и он пытается отправить форму, возникает исключение HttpRequestValidationException, когда ASP.NET пытается перенаправить на страницу входа. Исключение выдается, когда ASP.NET проверяет, является ли запрос запросом AJAX или нет, и в этот момент он пытается получить доступ к полю формы.

Трассировка стека:

[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (LongDescription="<p>Hello</p>").]
   System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8855748
   System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122
   System.Web.HttpRequest.get_Form() +150
   System.Web.HttpRequestWrapper.get_Form() +11
   System.Web.UI.PageRequestManager.IsAsyncPostBackRequest(HttpRequestBase request) +223
   System.Web.Handlers.ScriptModule.HttpResponse_Redirecting(Object sender, EventArgs e) +82
   System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent) +394
   System.Web.Security.FormsAuthenticationModule.OnLeave(Object source, EventArgs eventArgs) +9044409
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

Оскорбляющие строки кода в System.Web.UI.PageRequestManager.IsAsyncPostBackRequest:

// DevDiv Bugs 188713: X-MicrosoftAjax header is stripped by some firewalls 
string asyncPost = request.Form[AsyncPostFormField];
return !String.IsNullOrEmpty(asyncPost) && (asyncPost.Trim() == "true");

Все, что я хотел бы, - это чтобы он успешно перенаправил на страницу входа в этом сценарии. Я также не хочу отключать проверку .NET 4.0!

Кто-нибудь получил какие-либо идеи о том, как преодолеть эту проблему?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2012

Я также разместил это на форуме ASP.NET, чтобы посмотреть, сможем ли мы получить ответ.http://forums.asp.net/t/1791239.aspx/1?HttpRequestValidationException+redirecting+to+login+page+forms+authentication+

0 голосов
/ 10 января 2012

Очевидно, что есть проблема с "

Hello

".

Вы можете установить validateRequest = "false" в директиве Page в aspx, но это эффективно отключит проверку страницы и может быть вредным длясервер / db (может быть легко атакован).

Чтобы избежать этого, найдите код JS UrlEncoding этого значения перед отправкой страницы на сервер, или отключите проверку страницы (validateRequest) и обработайте ввод пользователя перед работойс ним -

string safe = HttpUtility.HtmlEncode (someTextbox.Text);

http://msdn.microsoft.com/en-us/library/ff647397.aspx

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