如何在不将RequestValidationMode设置为2.0的情况下禁用请求验证?

本文关键字:情况下 请求 验证 RequestValidationMode 设置 | 更新日期: 2023-09-27 18:10:58

我们刚刚升级到ASP。. NET 4.0,发现requestValidation不再工作。MSDN文档建议我们需要在web中设置requestValidationMode。配置到2.0:

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

这将为我们工作,但我有点困惑。看起来我们正在把它放入一个遗留/兼容模式。当然,它应该有4.0的行为,但仍然有一个选项,在一个页面上关闭它?

如何在不将RequestValidationMode设置为2.0的情况下禁用请求验证?

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

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

我认为你可以添加一个位置部分到你的主网页。配置只指定一个页面,但我还没有测试过。像这样:

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

最好的办法是用自己的代码重写requestValidationType:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDN链接

在requestValidationMode 4.0中,似乎不可能打开或关闭这个页面。

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

恢复到ASP。. NET 2.0请求验证特性,在Web中添加以下设置。配置文件:

<httpRuntime requestValidationMode="2.0" />

尽管它也有用地推荐

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

没有给出任何关于如何最好地解决这些问题的指导

Set requestValidationMode="0.0"禁用ASP。. NET页面和HTTP请求验证。值0.0在ASP中被识别。NET 4.6及更高版本。MSDN

<configuration>
  <system.web>
    <httpRuntime requestValidationMode="0.0" />

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

<%@ Page ValidateRequest="false" %>
相关文章: