昨天安装了VisualStudio 2010 Ultimate,今天把最近的一个项目升级到了4.0下,结果跑了一下,发现关于页面启用 ValidateRequest="false" 的部份失效。因而把web站点的版本及项目版本都降回原来的版本后,错误就消失了,因而搜索了一下,找到以下资料:web
A potentially dangerous Request.Form value was detected from the client (ctl00$MainContent$txtCode="<code></code>").promise
Version Information: Microsoft .NET Framework Version:4.0.21006; ASP.NET Version:4.0.21006.1安全
在安装了Visual Studio 2010 Beta2以后,当页面输入框默认状况下输入“<”或者“>”的时候。按照访问策略,这将致使一些安全问题,诸如:跨站脚本攻击(cross-site scripting attack)。而这个问题的更准确描述则是,当你在安装了.NET Framework 4.0以上版本后,当你的应用程序以.NET Framework 4.0为框架版本,你的任意服务器请求,都将被进行服务器请求验证(ValidationRequest),这不只包括ASP.NET,同时也包括Web Services等各类HTTP请求,不单单针对aspx页面,也针对HTTP Handler,HTTP Module等,由于这个验证(Valify)的过程,将会发生在BeginRequest事件以前。服务器
基于以上原理,在ASP.NET以前的版本中,请求验证也是默认开通的,可是发生在页面级(aspx)的,而且只在请求执行的时候生效,所以,在旧的版本中,咱们只须要按如下方式配置便可:app
在页面级别(aspx中)设置
ValidateRequest="false"
或者
在全局级别(Web.config中)设置
<configuration>
<system.web>
<pages validateRequest="false">框架
可是,以上设置仅对ASP.NET4.0以上有效。在ASP.NET4.0版本上,咱们须要更多一行的配置:ide
在全局级别(Web.config中)设置
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0">this
这一点其实在发生错误的页面中已经有说明了。在实际使用过程当中,不只如此,并且我发现requestValidationMode只要设置成小于4.0就能够,好比:1.0,2.0,3.0,3.9都是能够的,错误提示中指明用2.0,目的只是说明用ASP.NET 2.0的默认方式进行工做。spa