16

我们刚刚升级到 ASP.NET 4.0,发现 requestValidation 不再有效。MSDN 文档建议我们需要将web.config 中的requestValidationMode设置为 2.0:

  • 4.0(默认)。HttpRequest 对象在内部设置一个标志,指示在访问任何 HTTP 请求数据时都应触发请求验证。这保证了在请求期间访问 cookie 和 URL 等数据之前触发请求验证。配置文件中 pages 元素(如果有)或单个页面中 @Page 指令的请求验证设置将被忽略。
  • 2.0。请求验证仅对页面启用,并非对所有 HTTP 请求启用。此外,配置文件中 pages 元素(如果有)或单个页面中 @Page 指令的请求验证设置用于确定要验证哪些页面请求。

这对我们有用,但我有点困惑。似乎我们将其置于旧版/兼容模式中。当然应该可以有 4.0 的行为,但仍然可以选择在页面上关闭它?

4

4 回答 4

26

我找到了一种方法来实现这一点,而无需将整个站点的 RequestValidationMode 更改为 2.0:

您可以为要禁用请求验证的页面创建一个子目录,并将新的 web.config 添加到该目录,并将 RequestValidationMode 设置为 2.0,这样只有该目录将在 2.0 模式下工作,而不会影响所有其他将在 4.0 模式下工作。

我认为您可以在主 web.config 中添加一个位置部分,仅指定一个页面,但我尚未对此进行测试。像这样的东西:

<location path="Admin/Translation.aspx">
    <system.web>
        <httpRuntime requestValidationMode="2.0"/>
    </system.web>
</location>

希望它对您有所帮助,因为它帮助了我!

于 2012-06-02T04:15:15.460 回答
4

你最好的办法是用你自己的代码覆盖 requestValidationType:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDN链接

于 2012-03-23T20:02:04.203 回答
3

在 requestValidationMode 4.0 中似乎无法为页面打开或关闭此功能。

白皮书概述了 .Net 4.0 中的重大变化,这似乎是其中之一。甚至白皮书也建议恢复到 requestValidationMode 2.0

要恢复到 ASP.NET 2.0 请求验证功能的行为,请在 Web.config 文件中添加以下设置:

<httpRuntime requestValidationMode="2.0" />

虽然它也有帮助地推荐

您分析任何请求验证错误以确定现有处理程序、模块或其他自定义代码是否访问可能是 XSS 攻击向量的潜在不安全 HTTP 输入。

没有就如何最好地解决这些问题提供任何指导

于 2011-11-11T23:32:44.410 回答
-6

您可以ValidateRequest在页面指令中设置为 false:

<%@ Page ValidateRequest="false" %>
于 2011-10-12T13:42:26.010 回答