asp.net validateRequest原理探讨

问题描述

1.当我们输入非法字符(如:"<")时,asp.net会返回一个错误,这是由validateRequest控制的。在asp.net的管道处理中,第一步就是validateRequest,但验证失败并不会立即返回错误,它给Request对象的Form对象添加了一个异常,下图是调试的时候,在BeginRequest事件中截的:这种异常不会马上报出来,但你一调用这个属性时,就会马上报出来。还有,当我调试时查看了此对象,这个异常就消失了,原本应返回客户端的错误变成了正常的返回。这些都是怎么做到的?2.如果是MVC,在controller创建之后,调用action之前,才会报错,估计是调用了Form属性之后,根据这个异常生成了返回端的错误页面。那么如果我想全局禁用validateRequest应该怎么办(asp.net4.0)?

解决方案

解决方案二:
配置文件里设置吧
解决方案三:
配置文件里设置要把runtime改成2.0好像,感觉这种方案不太好,而且我也没去试这种方案行不行。
解决方案四:
顶一下,有没有大牛研究过这个?validateRequest是什么模块在处理?那种异常是怎么生成的?怎么在.net4.0下面完全关闭validateRequest?
解决方案五:
不清楚validateRequest详细实现细节,不过.net4.0下关闭validateRequest倒不难,web.config下<httpRuntimerequestValidationMode="2.0"。。。页面里:<%@PageValidateRequest="false"...
解决方案六:
如果不想这么做,那么在Global.asax.cs里的Application_Error方法里截获这个异常,自己处理,应该也可以。
解决方案七:
初步总结:方案一:<httpRuntimerequestValidationMode="2.0"/><pagesvalidateRequest="false"></pages>

1.在asp.netWebForm4.0里面,可用,在asp.netMVC3里面,无效,因为mvc是直接到controller,validateRequest="false"是加在pages上的。2.MVC3里面,可以通过在controller或action上加“[ValidateInput(false)]”来禁用。
解决方案八:
方案二:<httpRuntimerequestValidationType="RequestValidator"/>

web.config里的这句定义了asp.net的validator,默认的validator会在遇到"<>"时抛出异常,我们可以继承RequestValidator来自定义。RequestValidator会验证很多类型,QueryString,Form,Cookie,Files,Url,Path等。我们需要重写如下方法:publicclassCustomValidator:RequestValidator{protectedoverrideboolIsValidRequestString(HttpContextcontext,stringvalue,RequestValidationSourcerequestValidationSource,stringcollectionKey,outintvalidationFailureIndex){if(RequestValidationSource.Form==requestValidationSource&&collectionKey=="需要忽略的那些input,或自己指定更复杂的规则"){value=context.Server.HtmlEncode(value);}returnbase.IsValidRequestString(context,value,requestValidationSource,collectionKey,outvalidationFailureIndex);}}

这时,遇到“<>”不会再抛出异常。
解决方案九:
方案三(MVC):给需要验证的模型加上:[AllowHtml]

这种方法可以精确地控制到每一个传到服务器的字段。

时间: 2024-09-20 00:16:32

asp.net validateRequest原理探讨的相关文章

Oracle Freelist和HWM原理探讨及相关性能优化

oracle|性能|优化 Oracle Freelist和HWM原理探讨及相关性能优化 中兴通讯重庆研究所 游波   关键词:Freelist,HWM,存储参数,段,块,dump,优化 文章摘要:    近期来,FreeList的重要作用逐渐为Oracle DBA所认识,网上也出现一些相关的讨论.本文以FreeList为线索对Oracle的存储管理的原理进行较深入的探讨,涉及Oracle段区块管理的原理,FreeList算法等.而与FreeList密切相关的一个重用特性HWM,与sql性能密切相

Socket通信原理探讨(C++为例)

Socket通信原理探讨(C++为例)   一.网络中进程之间如何通信?      本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 1.消息传递(管道.FIFO.消息队列) 2.同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 3.共享内存(匿名的和具名的) 4.远程过程调用(Solaris门和Sun RPC)      但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识

ASP小偷程序原理和简单示例

程序|示例|小偷程序     (一)原理 小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页.比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤.用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新:可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站.缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应

ASP木马的原理和基本防范方法

木马 ASP木马猖獗,基于ASP的网站时时处于危险之中,要让网站的安全随时得到保障,需要我们的服务器管理员要做些什么呢,如何防范ASP木马呢?要防范ASP木马,那么我们就需要知道它的运行原理和机制,下面我们看一段代码: Set oscript = Server.CreateObject("Wscript.SHELL") "建立了一个名为oscript的Wscript.SHELL对象,用于命令的执行"Set oscriptNet = Server.CreateObject("W

ASP.NET事件小探讨

asp.net 今天早上做了ASP.NET页面计数器的实验,用的是简单的文本文件来存储计数器的数值(实际是以Byte类型值进行的存储),原理代码可见我以前发的<简单计数器实现程序>. 今天的任务是把原来WinForm中的文件读写放入到ASP.NET的BehindCode中,这就会出现些许问题. 问题一:文件路径在ASP.NET的BehindCode中写文件路径就不能因为文件在这个应用程序的目录下直接写文件名来调用了.例:以前使用WinForm编程的时候,如果文本文件Count.txt跟程序的可

asp.net运行原理详解

主要类:  System.Web.HttpRuntime  System.Web.HttpApplicationFactory  System.Web.HttpApplication  System.Web.Compilation.BuildManager  System.Web.Compilation.ApplicationBuildProvider  System.Web.Compilation.BuildProvidersCompiler  System.Web.UI.PageHandle

Android Monkey原理探讨

0x0 概述 本文不涉及如何使用monkey,官网说得够详细了,网上资料也一大堆.本文着重探讨monkey的实现原理,以及基于这些原理,我们可以做些什么?本文涉及的Monkey的源码位于AOSP的development项目的cmds目录下. 0x1 Monkey事件触发原理 Monkey的主要作用是,发送一些随机交互事件模拟人的随机操作.它是如何触发各种事件的呢? 1.1 触摸事件 触摸事件包括屏幕以及物理键的触摸,滑动,点击事件.我们可以通过发送一些adb命令模拟这些事件.不过Monkey实现

asp防盗链原理及代码

防盗链的原理: 不直接给出服务器中真实的url,将要访问的文件放到服务器上不可访问的目录中,所以要访问的文件就必须通过asp读取文件以二进制流的类型来发送文件,如果加上来源地址和用户登录状态的判断,可以一定意义上的防止盗链. 缺点是:不过开销也会很大. 下面是两个示例的函数,没有加上权限判断. Sub downloadFile(strFile)  On error resume next  Server.ScriptTimeOut=999999  Dim S,fso,f,intFilelengt

asp.net运行原理 详解_实用技巧

主要类: System.Web.HttpRuntime System.Web.HttpApplicationFactory System.Web.HttpApplication System.Web.Compilation.BuildManager System.Web.Compilation.ApplicationBuildProvider System.Web.Compilation.BuildProvidersCompiler System.Web.UI.PageHandlerFactor