Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式关闭请求验证_C#_Asp.net_Security - Fatal编程技术网

C# 以编程方式关闭请求验证

C# 以编程方式关闭请求验证,c#,asp.net,security,C#,Asp.net,Security,我有一个我正在编写的控件,我想关闭.NET内置的请求验证,它可以防止XSS攻击和类似的恶意行为 该控件允许网站所有者调整该页面上的内容。如果愿意,他们可能会输入标记。因为这是他们的网站编辑,他们必须能够坚持任何他们想在那里 我想知道是否有可能以编程方式禁用此验证 我能找到的唯一方法是在web.config中完全关闭请求验证,或者使用页面指令。由于各种原因,我无法在另一个页面中使用此控件,因此该选项已被禁用。在System.Web.Configuration中 PagesSection pageS

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

该控件允许网站所有者调整该页面上的内容。如果愿意,他们可能会输入标记。因为这是他们的网站编辑,他们必须能够坚持任何他们想在那里

我想知道是否有可能以编程方式禁用此验证


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

在System.Web.Configuration中

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

@Chris把我引向了正确的方向

我所做的是关闭web.config中的设置,并使用HTTP模块对用户未处于编辑模式的所有请求进行请求验证


在.NET2.0中,请求类上有一个名为ValidateInput的方法。这将进行验证,即使在web.config中将其关闭。

这里列出的答案都不够详细。由于配置项是只读的,因此首先需要修改它们,以便将其写入。此外,自.NET 4发布以来,您还需要在该
页面之前修改
HttpRuntime.RequestValidationMode
属性。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);
    }
}

您还应该知道,只有在之后的请求中才会激活。

您不需要获取实际的配置部分吗?我需要这样做来读取值,否则我只得到默认值。但写作可能会有所不同(?)。var pagesSection=System.Configuration.ConfigurationManager.GetSection(“System.web/pages”)作为pagesSection;