刚刚在写一个ASP.NET MVC项目,用到UEditor的时候,后台保存数据爆了一个错误:Additional information: A potentially dangerous Request.Form value was detected from the client。
这是因为浏览器传过来的数据带有HTML标签,被服务器当作危险请求而拒绝了。
在.net4.0以前,可以在ASPX的页面上加上属性ValidateRequest=false或在web.config中改变全局设定(<system.web><pages validateRequest="false"></pages></system.web>)来忽略此校验。
但在.net4.0以后,特别是在IIS8中,当页面输入框默认情况下输入“<”或者“>”的时候。按照访问策略,这将导致一些安全问题,诸如:跨站脚本攻击(cross-site scripting attack)。而这个问题的更准确描述则是,当你在安装了.NET Framework
4.0以上版本后,当你的应用程序以.NET Framework 4.0为框架版本,你的任意服务器请求,都将被进行服务器请求验证(ValidationRequest),这不仅包括ASP.NET,同时也包括WebServices等各种HTTP请求,不仅仅针对aspx页面,也针对HTTP Handler,HTTPModule等,因为这个验证(Valify)的过程,将会发生在BeginRequest事件之前。
在ASP.NET之前的版本中,请求验证也是默认开通的,但是发生在页面级(aspx)的,并且只在请求执行的时候生效,因此,在旧的版本中,我们配置方式是:
在页面级别(aspx中)设置
ValidateRequest=”false”(这种方式在ASP.NET MVC中不适用)
或者
在全局级别(Web.config中)设置
<configuration>
<system.web>
<pages validateRequest=“false“>
</system.web>
</configuration>
这种设置仅对ASP.NET4.0以下的有效。而在ASP.NET4.0版本上,这种配置是不够的,还要多加一行,如下:
在全局级别(Web.config中)设置
<configuration>
<system.web>
<httpRuntime requestValidationMode=“2.0“>
</system.web>
</configuration>
网上还在说法说requestValidationMode只要设置成4.0以下就可以,作者没有亲自测试过,但大多都是设置成2.0就可以了,作者也建议设置成2.0的。
推荐连接:
http://update.tuond.com/potentially-dangerous-Request.html
http://blog.youkuaiyun.com/civilman/article/details/5605516