【问题标题】:Turn off request validation programmatically以编程方式关闭请求验证
【发布时间】:2009-02-06 10:56:48
【问题描述】:

我正在编写一个控件,我想在其中关闭 .NET 的内置请求验证,以防止 XSS 攻击和类似的恶意攻击。

该控件允许网站所有者调整该页面上的内容。如果他们愿意,他们可能会输入标记。由于这是他们要编辑的网站,因此他们必须能够在其中粘贴任何他们想要的内容。

我想知道是否可以通过编程方式禁用此验证?

我能找到的唯一方法是在 web.config 中完全关闭请求验证或使用页面指令。由于各种原因,我无法在另一个页面中使用此控件 - 因此该选项已失效。

【问题讨论】:

    标签: c# asp.net security


    【解决方案1】:

    这里列出的答案都远远不够。由于配置项是只读的,因此您首先需要修改它们以便可以写入它们。此外,自.NET 4 发布以来,您还需要修改HttpRuntime.RequestValidationMode 属性才能识别此Pages.ValidateRequest 属性。

    public void ModifiyValidation(bool validate) {
    
        var pagesSection = System.Configuration.ConfigurationManager.GetSection("system.web/pages") as PagesSection;
        var httpRuntime = System.Configuration.ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
    
        if (pagesSection != null && httpRuntime != null && pagesSection.ValidateRequest != validate)
        {
            var fi = typeof (ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
            fi.SetValue(pagesSection, false);
            fi.SetValue(httpRuntime, false);
            pagesSection.ValidateRequest = validate;
            httpRuntime.RequestValidationMode = new Version(validate ? "4.0" : "2.0");
            fi.SetValue(pagesSection, true);
            fi.SetValue(httpRuntime, true);
        }
    }
    

    您还应该知道,只有在以下请求时才会激活。

    【讨论】:

      【解决方案2】:

      在 System.Web.Configuration 中

      PagesSection pageSection = new PagesSection();
      pageSection.ValidateRequest = false;
      

      Reference

      【讨论】:

      • 您不需要获取实际的配置部分吗?我需要这样做才能读取该值,否则我只会得到默认值。虽然写作可能会有所不同(?)。 var pagesSection = System.Configuration.ConfigurationManager.GetSection("system.web/pages") as PagesSection;
      【解决方案3】:

      @Chris 引导我朝着正确的方向前进。

      我所做的是关闭 web.config 中的设置,并使用 HTTP 模块对用户不在 EditMode 的所有请求进行请求验证。

      在 .NET 2.0 中,Request 类上有一个名为:ValidateInput 的方法。即使在 web.config 中关闭它也会进行验证。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-13
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多