从客户端检测到危险Request.Form值 - 为什么?

时间:2011-10-23 21:07:25

标签: asp.net-mvc asp.net-mvc-3 httprequest

我在这里阅读了与此错误相关的所有其他帖子。也许我在这里遗漏了一些东西,但我不知道是什么。我正在使用textArea在其中输入文本(html文本) 此文本区域与我的域类属性

绑定
public class SomeClass{
...
[AllowHtml]       
        public string CommentText { get; set; }
...
}

我还尝试添加 [ValidateInput(false)] 属性,但没有。但是通过阅读错误文本,我发现该请求甚至没有出现在控制器中,它在 Application_BeginRequest()中被破坏了。 这是错误消息:

A potentially dangerous Request.Form value was detected from the client (CommentText="<p>ddd</p>")
Line 23:         protected void Application_BeginRequest(Object sender, EventArgs e)
Line 24:         {
Line 25:             if (HttpContext.Current.Request["RequireUploadifySessionSync"] != null)
Line 26:                 UploadifySessionSync();
Line 27:         }

Source File: D:\Projects\...\Global.asax.cs    Line: 25 

Stack Trace: 


[HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (CommentText="<p>ddd</p>").]
   System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8755668
   System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122
   System.Web.HttpRequest.get_Form() +114

我知道我可以在web配置中关闭检查整个应用程序。但我只在一种情况下需要这个(允许HTML输入) 更奇怪的是,这是几天前的工作,我没有在这里做任何改变,只是登录和注销用户 我在这做错了什么?
好的,现在我删除这个代码fom global.asax:

if (HttpContext.Current.Request["RequireUploadifySessionSync"] != null)
                UploadifySessionSync();

现在它有效。但我在这里需要这个代码。为什么会产生这个错误?

2 个答案:

答案 0 :(得分:3)

这已经得到了解答。

Previous Question

您需要更改处理请求验证的方式,以便将其恢复为2.0

答案 1 :(得分:0)

您的具体问题是您有代码查看BeginRequest中的请求参数,该参数在ASP.NET管道中比绑定模型时更早(AllowHtmlValidateInput属性会发挥作用。)

看起来您正在使用您的代码围绕Flash上​​传实施安全性(我正在做的事情非常类似。

在我的情况下,我最终只是在BeginRequest方法中捕获HttpRequestValidationException并吞下异常。这不是最佳实践,但验证将在管道中稍后执行,因此您仍然可以控制验证。