最近在作一个ASP.NET MVC项目的时候发现,有一个Controller的Action死活都无法接收到从客户端提交过来的Html表单请求和数据,后来才发现是由于默认状况下ASP.NET MVC在执行Controller的代码前,会对客户端提交到服务器的数据作安全性验证,若是ASP.NET检测到客户端提交的数据中有危险数据(危险数据通常是一些关键字和关键符号),那么就会中断当前客户端提交的请求而且引起一个异常,那么客户端提交的数据天然就不会进入到Controller和Action了。主要缘由是在该项目中有页面使用了富文本编辑器,而用户在富文本编辑器中输入的文字其实是Html,因此当富文本编辑器的数据提交到服务器端后,ASP.NET认为客户端提交的数据中包含大量Html标签是危险数据,请求直接就被终止了,而后抛出异常。其实这个问题不光在ASP.NET MVC中存在,在WebForm中也是有数据安全性验证的,并且MVC和WebForm的数据安全性验证是能够经过设置来关闭的,详情请接着往下看。缓存
后来才知道,原来在ASP.NET MVC中有一个叫ValidateInputAttribute的Filter能够关闭数据安全性验证,将其加到接收数据的Action上后,客户端富文本编辑器的数据就能成功传入Action了,以下所示传入参数false就告诉ASP.NET不要对这个Action作数据安全性验证。 安全
下面是对MVC系统自带经常使用的几个Filter的介绍,其中就有ValidateInputAttribute服务器
名称 | 说明 |
OutputCacheAttribute | 相似于 Web Form中在 OutputCache 指令。 OutputCache 属性容许在 MVC Framework 缓存控制器的输出。 |
ValidateInputAttribute | 相似于 Web Form中 ValidateRequest 属性。 MVC 框架默认将为 检查HTML 或其余危险输入传入的 HTTP 请求。 若是检测到,将引起异常。 使用此属性能够禁用请求验证。mvc |
AuthorizeAttribute | Authorize 属性,能够对控制器操作的声明性的受权检查。 该属性能够限制特定角色中的用户的操做。 当您建立只应该给管理员角色中的用户的操做时,您可使用此属性。默认使用的ASP.NET Membership服务,若是不使用ASP.NET 的Membership服务,能够继承AuthorizeAttribute,重写实现。 |
ValidateAntiForgeryTokenAttribute | 此属性是一个解决方案以帮助防止跨站点的请求攻击 (CSRF)。 它容许验证的 HTTP POST 为特定于用户的标记在 Framework。 有关详细信息 CSRFs,请参阅" 使用 ASP.NET MVC AntiForgeryToken() 帮助器防止跨站点请求伪造 (CSFR)." |