【问题标题】:Hidden Input Field causes potentially dangerous Request.Form value error隐藏的输入字段导致潜在危险的 Request.Form 值错误
【发布时间】:2010-09-21 12:41:51
【问题描述】:

在我的 ASP.NET 1.1 应用程序中,我正在压缩并用另一个压缩值替换隐藏的 Viewstate 变量,该值存储在一个名为 __VSTATE 的隐藏字段中。这很好用,但在少数情况下,提交页面会导致常见的“潜在危险的 Request.Form 值...”错误。

我检查了 __VSTATE 值,似乎没有任何危险。我能够使用完全精简的页面版本和 __VSTATE 值重现错误,如下所示。按下提交按钮会导致错误。如果我将值更改为“”,页面可以正常工作。

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Dangerous.aspx.vb" Inherits="Dynalabs.Dangerous" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <body MS_POSITIONING="FlowLayout">

    <form id="Form1" method="post" runat="server">
      <input type="hidden" id="__VSTATE" runat="server" value="Onw=" />
      <asp:Button ID="btnSubmit" Runat="server" Text="Submit" />
    </form>

  </body>
</html>

将字段名称更改为“MyHiddenWT”没有任何区别。删除 runat="server" 确实停止了错误,但这仅意味着 .NET 仅检查服务器端控件。我还尝试了一些附加值,并发现了以下值:

"Anw=", "Bnw=", "Cnw=", ... "Nnw=", "Onw=", "Pnw=", ... "Znw=", 

"Onw=" 是导致问题的唯一原因。大写的 O 是否以某种方式被视为八进制值?

有人可以解释为什么这个值会触发错误消息吗?我也在寻找解决方案,但请不要告诉我删除页面验证。这就像说一辆刹车不好的汽车可以通过不开车来修理一样。

提前谢谢你。

【问题讨论】:

  • 这不是更像一辆刹车吱吱作响的汽车,通过拆下刹车来修复吗?

标签: security validation postback asp.net-1.1


【解决方案1】:

我的第一个猜测是它看起来像一个 "OnSomething=" javascript 事件声明。

只有大写的O会触发错误,这有点奇怪,您是否也对小写的o进行了测试?

你能试试这些:“OnClick=", "abc OnClick=", "onclick=", "abc onclick=", "anw=", "bnw=", ...


如果 "OnSomething=x" javascript 存在问题,那么只需在值中添加另一个字符即可解决问题。也许一个简单的“v”就可以了。

<input type="hidden" id="__VSTATE" runat="server" value="vOnw=" />

然后在提交时,在解码之前删除多余的字符。

或者更好,升级到 2.0。

【讨论】:

    【解决方案2】:

    你已经掌握了原因的本质。这是我从另一个网站收到的回复中的最佳链接:

    http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet.security/browse_thread/thread/d91d89511401e979

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 2011-02-15
      • 2011-11-09
      • 1970-01-01
      • 2016-03-13
      • 2010-12-25
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多