【问题标题】:Disable hidden field validation禁用隐藏字段验证
【发布时间】:2012-07-05 06:51:02
【问题描述】:

我有一个用 HTML 填充的隐藏字段,用于在页面加载时出现模式弹出框。 但是,在回发时,隐藏字段的内容会出现异常:

A potentially dangerous Request.Form value was detected from the client (ctl00$MainContentCP$hfContent="<div>

我知道您可以使用以下方法禁用整个页面的验证:

validateRequest="false"

但由于此页面有一些我想保护免受脚本攻击的文本字段,这可能不是正确的解决方案。

我可以以某种方式仅对隐藏字段禁用验证吗?

导致异常的代码:

  <asp:HiddenField ID="hfContent" runat="server" />

  if (!Page.IsPostBack)
  {
        Pages pages = new Pages();
        hfContent.Value = pages.getPageById(14).PageContent; //this
  }

【问题讨论】:

  • 小提示:脚本攻击只能通过编码输出而不是输入来预防。 您应该已经对所有输出进行了编码。 然后您不必担心输入,至少就 XSS 攻击而言。验证可防止无效数据进入,因此您应该使用常规的验证器控件,但 IMO validateRequest 不是绝对必要的,如果您正在对所有输出进行编码,您可以安全地为页面禁用它。
  • 你用的是什么asp.net框架版本?
  • @DavidStratton:好吧,我认为它也验证了输出。对于输出验证,我应该使用 Server.HtmlEncode() 还是你会建议什么?
  • @ElYusubov:我使用的是 4.0 ASP.NET
  • Server.HtmlEncode 可以,但我更喜欢 Microsoft Anti-Xss 库。它使用白名单方法,并提供额外的功能,如 GetSafeHtmlFragemnt(),让无害的 html 标签通过未编码。 msdn.microsoft.com/en-us/security/aa973814.aspx

标签: c# asp.net validation request


【解决方案1】:

如果您创建 4.0 ASP.NET 应用程序,请参阅: ASP.NET Request Validation section

【讨论】:

    【解决方案2】:

    声明中似乎有错误。请尝试以下操作:

    <asp:HiddenField ID="hfContent" Value="String" runat="server" />
    

    还要仔细检查分配给隐藏字段的值。 在您的代码中,您需要删除行 Pages pages = new Pages();

    【讨论】:

    • 我对从 aspx 文件中绑定隐藏字段的值不感兴趣。它必须从代码隐藏中发生,因为值是从数据库中收集的并且需要是可更改的。我分配的值是问题,因为它包含几个非法字符“
    • Pages pages = new Pages();您的页面对象为空,因此 pages.getPageById(14) 将返回 null 或异常
    • 不,为什么那个对象应该是空的?页面是一个类文件,它显然包含 getPageById 方法,我知道有 id 为 14 的页面。如果没有,我很确定我会得到一个空异常而不是这个。
    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 2019-01-29
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多