隐藏的输入字段会导致潜在危险的Request.Form值错误

时间:2008-11-09 17:37:47

标签: security validation postback asp.net-1.1

在我的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视为八进制值吗?

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

提前谢谢。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

你有理由的本质。这是我从其他网站获得的回复中的最佳链接:

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