繁体   English   中英

以编程方式关闭请求验证

[英]Turn off request validation programmatically

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

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

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

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

这里概述的答案还远远不够。 由于配置项目是只读的,因此您首先需要对其进行修改以便可以将其写入。 此外,从.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);
    }
}

您还应该注意,只会在以下请求上激活。

在System.Web.Configuration中

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

参考

@克里斯带领我朝着正确的方向前进。

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

在.NET 2.0中,Request类上有一个方法:ValidateInput。 即使在web.config中将其关闭,这也将进行验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM