我有一个控件,我在写关于.NET的内置请求验证,以防止XSS攻击和类似的错误。以编程方式关闭请求验证
该控件允许网站所有者调整该页面上的内容。如果他们愿意,他们可能会输入标记。由于它是他们的网站进行编辑,他们必须能够在那里粘贴他们想要的任何内容。
我想知道是否有可能以编程方式禁用此验证?
我能找到的唯一方法是通过在web.config中完全关闭请求验证或使用页面指令。出于各种原因,我不能在另一个页面中使用此控件 - 因此该选项已停用。
我有一个控件,我在写关于.NET的内置请求验证,以防止XSS攻击和类似的错误。以编程方式关闭请求验证
该控件允许网站所有者调整该页面上的内容。如果他们愿意,他们可能会输入标记。由于它是他们的网站进行编辑,他们必须能够在那里粘贴他们想要的任何内容。
我想知道是否有可能以编程方式禁用此验证?
我能找到的唯一方法是通过在web.config中完全关闭请求验证或使用页面指令。出于各种原因,我不能在另一个页面中使用此控件 - 因此该选项已停用。
在System.Web.Configuration
PagesSection pageSection = new PagesSection();
pageSection.ValidateRequest = false;
@克里斯导致我在正确的方向。
我所做的是关闭web.config中的设置,并使用HTTP模块为用户不在EditMode中的所有请求执行请求验证。
在.NET 2.0中,Request类中有一个名为ValidateInput的方法。即使它在web.config中关闭,也会执行验证。
这里概述的答案都不够。由于配置项是只读的,因此您首先需要修改它们以便写入。此外,自.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);
}
}
你也应该知道,只会在激活以下请求。
你不需要得到实际的配置部分?我需要这样做来读取值,否则我只是得到了默认值。虽然(?)可能会有所不同。 var PagesSection = System.Configuration.ConfigurationManager.GetSection(“system.web/pages”)为PagesSection; – misteraidan 2011-09-13 01:04:07