从客户端检测到有潜在危险的Request.Form值的问题

来源:互联网 发布:百度地图js api周边 编辑:程序博客网 时间:2024/04/29 03:55

       同样的问题又一次遇到了,还是那个原则,第一次遇到可以挂起来,可是第二次又遇到它,说明这个问题很重要,必须解决。

在界面上提交带有Html标记的文本时,如果不经过处理,就会报出这样的错误。针对这个错误,网上大概有这么几种解决方法:

1.    解决方案一:
       在.aspx文件头中加入这句:

        <%@ Page validateRequest="false" %>

        eg:<%@ Page Language="C#" AutoEventWireup="false" ValidateRequest="false" CodeFile="你的页面.vb" Inherits="你的页面" %>

2. 解决方案二:
        修改web.config文件:
               <configuration>
               <system.web>
               <pages validateRequest="false" />
               </system.web>
               </configuration> 
        因为validateRequest默认值为true。只要设为false即可。

3.解决方案三:

        截获 HttpRequestValidationException 异常。这种解决方案倡导者认为,直接将validateRequest的值设置false会给网站带来安全隐患。我们应该主动去截获这些特殊的标记,提示用户去修改。

        但这样也有缺点,就是这些被定义的标记字符对于用户来说就是不可用的。同时,我们不可能把所有的HTML标记都屏蔽,所以,还得根据实际情况斟酌一下!

        详细方法请见:连接

4.解决方法四:

        之所以有解决方案四,是因为我这个人比较懒,同时第一第二在我这没有起效果。

        为什么在网上大家都使用的方法在我这里不起作用?

        requestValidationMode,这个在.netframework4.0中出现的属性在作怪!

        requestValidationMode 有两个值:

             2.0仅对网页启用请求验证。是启用还是关闭取决于 validateRequest。

            4.0 默认值。任何 HTTP 请求都会启用请求验证,也就是说不光是网页,还包括 Cookie 等。此时强制启用,不管 validateRequest 为何值。

        由于 requestValidationMode="4.0" 是强制启用,所以我们会发现在 .NET Framework 4.0 中仅靠设置 validateRequest 是关闭不了请求验证的,还得将 requestValidationMode 设置为 2.0。

         这就是为什么我使用上述两个方法都不起作用的原因。

 

        所以,最终我使用的解决方案就是:(提示,这种方法仅供练习,存在安全问题!)

        在webconfig中将requestValidationMode设置为2.0.然后在配合解决方案一,就完美啦!

            <system.web>
              <httpRuntime requestValidationMode="2.0" />
            </system.web>

 

 

原创粉丝点击