【问题标题】:asp.net ValidateRequest=false per textbox instead of per page?asp.net ValidateRequest=false 每个文本框而不是每个页面?
【发布时间】:2010-08-23 22:34:29
【问题描述】:

有没有办法只对某些文本框而不是整个页面禁用请求验证?我正在使用 Server.HtmlEncode/Decode,因为用户合法地使用 字符,但我不想在整个页面上使用 ValidateRequest="false",因为有人可能稍后添加文本框并忘记转义输入,在这种情况下我会希望发生验证,以便发现错误而不是容易受到 html 注入的攻击。

似乎必须有一个简单的解决方案,但我没有找到它。

(Webforms 不是 MVC)

【问题讨论】:

  • 这很痛苦 -> 当我发布我的答案时,.NET 4.5 没有发布。
  • @Tommy 我知道,当我问这个问题时也不是,但它是最新的答案,对阅读本文的未来用户更有用。不过,您的回答仍然受到支持。
  • 哈哈 - 我知道 :) 没什么私人的,但我确实必须来看看。 PS - 看起来我很接近下面的 .NET 5.0 评论。
  • @Tommy - 更新你的答案,我会删除我的:)
  • @ajbeaven - 没办法,伙计,这都是你的。我不知道它被添加到 .NET 4.5,所以我学到了一些新东西! :)

标签: asp.net validation


【解决方案1】:

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

MSDN

Stackoverflow

【讨论】:

  • 我觉得难以置信的是,没有办法对每个控件进行操作。即使是知道自己在做什么的人偶尔也会忘记,最好有一个后备。但是无论如何+1,因为我找不到任何相反的东西。如果明天没有任何事情发生,我会接受。
  • 也许适用于 .NET 5.0 :)
  • 我同意不支持这很荒谬,但我的理解是@Tommy 是正确的,在当前的 ASP.NET 中确实不可能。
  • 如果您想为单个控件打开此功能,您必须自己进行。老实说,如果您使用反射器来查看算法,它并不是非常复杂。本质上,它只是寻找一些非常基本的违规角色并将它们踢出去。但是,我可能会提到它出于性能原因使用了“不安全”关键字,但它必须查看整个请求,而不仅仅是单个控件。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 2017-05-01
  • 2011-05-20
相关资源
最近更新 更多