在.NET 4.0中,请求验证升级了一个档次!当任何代码尝试访问Request.Form时,似乎验证了表单中的值,并抛出了HttpRequestValidationException。
这本身不应该是一个问题,除了我发现了一个特殊的场景,在这个场景中,ASP.NET本身肯定没有帮我处理这种情况。
我有一个接受HTML输入的表单(我不愿意,但是我确实,好吗?)。此表单的编辑模型在字段上具有[AllowHtml]
属性,因此提交HTML很好,不会抛出异常。
但是,如果用户未经过身份验证(例如,他们的会话超时)并且他们尝试提交表单,则在ASP.NET尝试重定向到登录页面时会抛出HttpRequestValidationException。当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验证!
有人对如何克服这个问题有任何想法吗?
答案 0 :(得分:0)
“&lt; p&gt; Hello&lt; / p&gt;”显然有问题。
您可以在aspx中的Page指令中设置validateRequest =“false”,但这会有效地禁用页面验证,并且可能对服务器/ db有害(可以轻易攻击)。
要避免这种情况,请在将页面发送到服务器之前查找此值的一些JS UrlEncoding,或者在使用它之前禁用页面验证(validateRequest)并处理用户输入 -
string safe = HttpUtility.HtmlEncode(someTextbox.Text);
答案 1 :(得分:0)
我已经在ASP.NET论坛上发布了这个,看看我们是否能得到回复。 http://forums.asp.net/t/1791239.aspx/1?HttpRequestValidationException+redirecting+to+login+page+forms+authentication+