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 是否以某种方式被视为八进制值?

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

先感谢您。

4

2 回答 2

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。

于 2008-11-09T18:30:23.023 回答
0

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

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

于 2008-11-09T21:11:00.860 回答