[英]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.