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