在每个文本框而不是每个页面使用asp.net的ValidateRequest=false?

6
有没有办法仅针对某些文本框而不是整个页面禁用请求验证?我正在使用Server.HtmlEncode / Decode,因为用户合法地使用<和>字符,但我不想在整个页面上使用ValidateRequest =“false”,因为有人可能会添加一个文本框并忘记转义输入,在这种情况下,我希望进行验证,以便发现错误而不会容易受到html注入攻击。看起来似乎有一个简单的解决方案,但我没有找到任何有效的方法。(Webforms not MVC)

那真是痛苦 -> 当我发布我的答案时,.NET 4.5还没有发布。 - Tommy
@Tommy 我知道,当我提出这个问题时它并不是最新的答案,但它是更为实用和更新的答案,对于未来阅读此内容的用户更有帮助。尽管如此,你的回答仍然被点赞了。 - Davy8
哈哈 - 我知道 :) 没有个人恩怨,但我确实需要来检查一下。另外 PS - 看起来我之前关于 .NET 5.0 的评论很接近。 - Tommy
@Tommy - 请更新你的答案,我会删除我的 :) - ajbeaven
2
@ajbeaven - 没门,兄弟,这全是你的。我不知道它被添加到.NET 4.5中,所以我学到了新东西! :) - Tommy
2个回答

3
不,请求验证是针对整个请求的,不能逐个元素进行。 ASP.NET 默认启用请求验证,旨在帮助那些不知道如何从脚本注入攻击中消毒 HTML 输入的人。下面发布了一些进一步阅读的链接:

MSDN

Stackoverflow


我觉得难以置信的是,没有一种方法可以针对每个控件进行操作。即使是知道自己在做什么的人有时也会忘记,因此拥有备选方案是很好的。无论如何,还是点赞+1,因为我没有找到任何相反的东西。如果明天没有出现其他情况,我就会接受。 - Davy8
也许是.NET 5.0的东西 :) - Tommy
我同意这是荒谬的,这不被支持,但我的理解是@Tommy是正确的,目前在ASP.NET中确实不可能。 - Stuart
如果您想为单个控件启用此功能,则必须自己执行。老实说,如果您使用反射器查看算法,它并不是非常复杂。基本上,它只是查找一些非常基本的有问题字符并将其删除。但是,我可能需要提到出于性能原因它正在使用“unsafe”关键字,但它必须查看整个请求,而不仅仅是单个控件。 - Josh


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