3

我正在使用 ASP.NET WebForms (.NET 4.5) 并有一个“内容块”控件,可以在多个页面上重复使用。我尝试将控件的 ValidateRequestMode 甚至单个元素设置为“已禁用”,但是来自 web.config 的请求验证仍然可以防止不安全的输入。

有没有办法解决这个问题或者我做错了什么?

例子:

4

3 回答 3

9

经过一上午的反复试验后,我刚刚用下面的代码为一个网站解决了同样的问题——微软关于新请求验证过程的文档在涉及 WebForms 时似乎是错误的。

在 web.config 中定位 .NET 4.5,如下所示:

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" />

然后添加ValidateRequestMode="Disabled"到输入控件本身,即:

<asp:textbox id="myControl" runat="server" ValidateRequestMode="Disabled"/>

如果您直接访问 POST 数据(而不是通过 myControl.Text),那么您还需要绕过验证:

Request.Unvalidated.Form("myControl");
于 2015-02-05T11:40:11.227 回答
0

这个答案将@Jason Elkin 的上述答案扩展到 .NET Framework 4.8,并将其宽松的安全范围限制在特定目录。正如之前报道 ValidateRequestMode="Disabled"的那样,它本身对我不起作用。起作用的是将以下内容插入到我的 ASP.NET 应用程序项目 Web.config 文件中:

  <location path="pages/ajax">
    <system.web>
      <!-- enable AJAX -->
      <xhtmlConformance mode="Strict" />
      <!-- this allows HTML content to post back when control's ValidateRequestMode="Disabled" -->
      <httpRuntime targetFramework="4.8" requestValidationMode="4.8" />
    </system.web>
  </location>

其中"pages/ajax"是从 web.config 目录到包含发布 HTML 输入的 Web 表单的目录的相对路径。

于 2020-04-18T16:49:02.973 回答
0

同意杰森埃尔金的观点。

作为补充,在设置ValidateRequestMode="Disabled" 控制级别后,在服务器端,每当访问Request时,您必须访问Request.Unvalidated来获取值。

于 2017-03-21T06:18:16.160 回答