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