【问题标题】:ValidateRequest ="false" for single controlValidateRequest ="false" 用于单个控件
【发布时间】:2011-01-28 20:20:42
【问题描述】:

我想让用户只在一个文本框中输入 HTML。我知道可以将页面指令中的 ValidateRequest 更改为 false 以取消保护。

我猜这允许在页面上的任何文本框中输入 HTML。有没有办法只在一个控件上应用ValidateRequest="false"

感谢您的帮助。

【问题讨论】:

    标签: asp.net validate-request


    【解决方案1】:

    .NET 4.5 中的新功能:您可以在控件上设置ValidateRequestMode="Disabled"。见MSDN

    【讨论】:

      【解决方案2】:

      不,请求验证是针对整个请求或什么都不做。

      默认添加了验证,以保护对输入验证一无所知的开发人员。如果您知道所有输入都必须被视为不安全,并且知道如何正确编码您从输入中使用的数据以保护自己免受 SQL 注入和跨站点脚本等攻击,您可以关闭验证。

      编辑:

      更新:在 .NET 4.5 中添加了 ValidateRequestMode property,它允许从页面全局验证中排除控件。

      【讨论】:

      • @ajbeaven:有趣。我添加了有关这种可能性的信息,以使答案保持最新。
      【解决方案3】:

      尝试关闭 ValidateRequest 并使用此方法从每个单独的控件/参数中删除标记:

      public static string RemoveMarkUp(this string s) {
         return Regex.Replace(s, @"<[a-zA-Z\/][^>]*>", string.Empty);
      }
      

      【讨论】:

      • -1 你不需要删除任何东西,它只需要正确编码。我讨厌我输入一些东西,然后它的一部分被公然删除。
      • @Josh Stodola:取决于程序员。如果您使用的是 ValidateRequest="true" 那么您肯定不想要任何标记,甚至不需要编码标记。此外,编码字符串以在 HTML 中显示的过程通常在呈现页面时完成,而不是在存储数据之前完成。
      • +1 表示 -1 太苛刻:这没有错,只是不同的解决方案具有不同的优缺点。
      猜你喜欢
      • 2011-01-05
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多