zoukankan      html  css  js  c++  java
  • ASP.NET 4.0中使用FreeTextBox和FCKeditor遇到安全问题警告的解决办法

    引言


    本人在.NET 4.0+VS2010环境下调试一个ASP.NET 4.0程序时使用到富文本控件FreeTextBox 3.2.2。从网络上查询得到这个控件尽管被广泛使用,但是其相关的安全问题需要自行解决。

    我的问题


    我的问题是在VS2010中使用FreeTextBox 3.2.2用于辅助发送邮件主体内容时,系统出现如下的错误提示:

     

    A potentially dangerous Request.Form. value was detected from the client (FreeTextBox1="<H1>bbtest1</H1>").

    Description:Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. To allow pages to override application request validation settings, set the requestValidationMode attribute in the httpRuntime configuration section to requestValidationMode="2.0". Example: <httpRuntime requestValidationMode="2.0" />. After setting this value, you can then disable request validation by setting validateRequest="false" in the Page directive or in the <pages> configuration section. However, it is strongly recommended that your application explicitly check all inputs in this case. For more information, see http://go.microsoft.com/fwlink/?LinkId=153133.

    Exception Details:System.Web.HttpRequestValidationException: A potentially dangerous Request.Form. value was detected from the client (FreeTextBox1="<H1>bbtest1</H1>").


    原因如上所示:我在邮件主体内容(即上面的富文本框中输入具有样式H1的测试文本“bbtest1”。


    原因分析及解决办法


    ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力。当用户试图用之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个 HttpRequestValidationExceptioin。也就是说,页面请求(request)时,含有html或javascript等字符串时。ASP.NET会认为是危险的值,就会抛出辞异常。当页面上使用了所见即所得编辑器(例如使用了fckeditor或FreeTextBox控件等)的时候会发生此异常。以下三种方法是针对ASP.NET 2.0或ASP.NET 3.5环境下的解决办法。

    解决方法一

    在页面上加入 <% Page ValidateRequest="false"  %>

    解决方法二

    修改Web.Config配置文件的<pages>标签。<pages validateRequest="false">...</pages>。这个方法会将所有的页面校验功能去掉,所以不推荐使用此方法。  

    解决方法三

    捕获异常,这样你就可以自己来定义异常的提示方式。



    ASP.NET 4.0请求验证模式发生变化


    ASP.NET请求验证功能可以给我提供应用程序的安全保证,避免站点受到XSS的攻击。但是在一些情况下,我们需要禁用这个功能,比如我们需要使用HtmlEditor来让用户输入一些HTML文本,这时候ASP.NET 2.0允许我们可以通过在web.config设置validateRequest="false"。或者在MVC中,我们可以通过在 Controller或者Action上设置[ValidateRequest(false)]这个特性来达到禁用的上的。但是在当你把站点从旧版本升级到ASP.NET 4.0后,你会发现,即使你这样做,仍然会提示你这样的一个异常“A potentially dangerous Request.Form. value was detected from the client”。该如何来解决这个问题呢?

    在之前的ASP.NET版本中,请求验证是默认启用的,但是它只对页面请求有效(请求.aspx页面),并且也只是在页面被请求时验证。但是在ASP.NET 4.0中,请求验证功能被提前到IHttpHandler.BeginRequest这个方法被请求之前,这也就意味着所有进入ASP.NET请求通道的所有的HTTP请求都将会被进行请求内容合法性的验证,包括有的自定义HttpHandler,WebService请求,甚至于利用自定义Http Module进行自定义请求处理程序。

    请求验证处理被提前的后果就是导致我们在页面,或者Controller中设置 ValidateRequest=false,将会失效,无法阻止程序不去验证请求的输入内容了。因为这样做后,验证器无法得到请求的页面是否禁用了验证请求,因为还没有实例化HttpHandler。

    在ASP.NET4.0中,并没有提供给我一个地方去禁用这个验证功能。但是出于兼容性的考虑,ASP.NET允许我们通过在web.config中配置使用ASP.NET 2.0的请求验证行为:<httpRuntime requestValidationMode=”2.0″ />


    关于FCKeditor

    对于喜欢和FCKeditor的用户应当也会遇到类似于上述的问题。“百度知道”有如下的问题,请参考:


    :<httpRuntime requestValidationMode="2.0" />在哪设置?



    使用FCKeditor后报错:
    "从客户端中检测到有潜在危险的 Request.Form. 值."
    设置了 ValidateRequest="false"后还是报同样错误:
    
    说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止。
    该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击。
    若要允许页面重写应用程序请求验证设置,请将 httpRuntime 配置节中的 requestValidationMode 特性设置为 requestValidationMode="2.0"。
    示例: <httpRuntime requestValidationMode="2.0" />。
    设置此值后,可通过在 Page 指令或 <pages> 配置节中设置 validateRequest="false" 禁用请求验证。
    但是,在这种情况下,强烈建议应用程序显式检查所有输入。
    
  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/bdstjk/p/2519856.html
Copyright © 2011-2022 走看看