我正在尝试解决“从客户端检测到一个有潜在危险的Request.Form值”问题,并且SO答案和Scott Hanselman建议设置
<httpRuntime requestValidationMode="2.0" />
在Web.config中(同时为有问题的方法添加属性) 我意识到这会将验证模式更改为ASP.NET 2.0,但这意味着什么? 而且,这种变化是否有任何我应该注意的副作用?
感谢。
答案 0 :(得分:15)
查看MSDN's HttpRuntimeSection.RequestValidationMode Property上的说明。
<强> 2.0 即可。仅对页面启用请求验证,而不是对所有HTTP请求启用。另外,页面的请求验证设置 配置文件或@Page指令中的元素(如果有) 在单个页面中用于确定请求的页面 验证
答案 1 :(得分:1)
查看ASP.NET Request Validation&gt;
ASP.NET中的请求验证功能提供了一定的级别 针对跨站点脚本(XSS)攻击的默认保护。在 在以前版本的ASP.NET中,请求验证已启用 默认。但是,它仅适用于ASP.NET页面(.aspx文件和 他们的类文件)并且只有在那些页面正在执行时才会发生。
在ASP.NET 4中,默认情况下,为所有人启用请求验证 请求,因为它在BeginRequest阶段之前启用 HTTP请求。因此,请求验证适用于请求 所有ASP.NET资源,而不仅仅是.aspx页面请求。这包括 请求,例如Web服务调用和自定义HTTP处理程序。请求 当自定义HTTP模块正在读取时,验证也处于活动状态 HTTP请求的内容。
因此,请求现在可能会发生请求验证错误 以前没有触发错误。要恢复到的行为 ASP.NET 2.0请求验证功能,添加以下设置 在Web.config文件中:
<httpRuntime requestValidationMode="2.0" />
但是,我们建议您分析任何请求验证错误 确定是否存在现有处理程序,模块或其他自定义代码 访问可能是XSS攻击的潜在不安全的HTTP输入 载体