我们刚刚升级到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:
你可以为你想要禁用请求验证的页面创建一个子目录,并添加一个新的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" %>