单个控件的ValidateRequest属性设置为"false"

19

我想让用户仅在一个文本框中输入HTML。 我了解可以更改页面指令中的ValidateRequest为false以删除保护。

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

感谢任何帮助。

3个回答

19

不,请求验证适用于整个请求或者不适用。

添加验证是为了保护那些对输入验证毫不知情的开发人员。如果您知道所有输入都必须视为不安全,并知道如何正确编码从输入中使用的数据以保护自己免受SQL注入和跨站脚本等问题的影响,则可以关闭验证。

编辑:

更新:在.NET 4.5中,新增了ValidateRequestMode属性,允许排除页面全局验证中的控件。 (链接)


2
@ajbeaven:有趣。我添加了关于这种可能性的信息,以保持答案的最新状态。 - Guffa

5
.NET 4.5 新特性:您可以在控件上设置 ValidateRequestMode="Disabled"。详见MSDN

0

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

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

4
不需要删除任何内容,只需进行正确编码。当我输入某些内容时,却明显地被剥离了部分内容,这让我感到很烦恼。 - Josh Stodola
@Josh Stodola:这取决于程序员。如果您使用ValidateRequest="true",那么您绝对不希望有任何标记,甚至是编码的标记。此外,在将数据存储之前通常不会对字符串进行用于在HTML中显示的编码处理,而是在呈现页面时完成该过程。 - Max Toro
+1 对于 -1 来说有点过于严厉了:它并没有错,只是一种不同的解决方案,具有不同的优缺点。 - Scott Stafford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接