警戒ASP.NET MVC中的ValidateInputAttribute

最近在作一个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)."
相关文章
相关标签/搜索