【问题标题】:Control level ValidateRequestMode has no effect控制级别 ValidateRequestMode 无效
【发布时间】:2014-07-01 06:31:13
【问题描述】:

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

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

例子:

【问题讨论】:

    标签: c# asp.net .net webforms request-validation


    【解决方案1】:

    经过一上午的反复试验后,我刚刚用下面的代码为一个网站解决了同样的问题 - 微软关于新请求验证过程的文档在涉及 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");
    

    【讨论】:

      【解决方案2】:

      同意杰森·埃尔金的观点。

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

      【讨论】:

        【解决方案3】:

        此答案将@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 表单的目录的相对路径。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-07
          • 2019-12-15
          • 1970-01-01
          • 1970-01-01
          • 2014-11-15
          • 1970-01-01
          • 2021-11-04
          相关资源
          最近更新 更多