在我的 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 是否以某种方式被视为八进制值?
有人可以解释为什么这个值会触发错误消息吗?我也在寻找解决方案,但请不要告诉我删除页面验证。这就像说一辆刹车不好的汽车可以通过不开车来修理一样。
先感谢您。