在一个 base-64 字符串中有无效字符 - ViewState?

3

每天都会有一大堆这样的错误在Web应用程序中出现。

Exception: System.FormatException: Invalid character in a Base-64 string.
   at System.Convert.FromBase64String(String s)
   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
   at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState)
   at System.Web.UI.HiddenFieldPageStatePersister.Load()

我认为错误来自于解码ViewState,但我很难触发这个错误。我从未能够在开发环境中触发错误,只有在生产环境中。即使在生产环境中,我也无法轻易地重现错误。页面上有几个数据视图的过滤器,选择不同的值最终会引发错误,但没有任何模式可以找出。有时候第一次更改过滤器就会出错,有时候则是没有任何组合会出错。


有没有代理服务器/防火墙可能在提交时搞乱了ViewState? - vcsjones
那不会抛出安全异常吗? - Abe Miessler
我们每天也会遇到一些类似的情况。我想黑客们在尝试一些奇怪的东西,以防它会破坏你的服务器。 - Simon Mourier
1个回答

0

可能是以下原因之一:

  • 应用程序池回收
  • 服务器农场或服务器集群
  • 代理服务器和病毒扫描器

首先,我会在 machine.config 中使用特定的密钥来防止每个进程启动时自动生成密钥。


在我做出这个改变之前,我正在等待服务器管理员的回复。该服务器是一个临时服务器,但有一些应用程序在其中被用作生产环境。我会尽快返回并查看是否改变起作用。 - virtuesplea
这台服务器是服务器农场的一部分,用于托管一些关键的Web应用程序,尽管它应该是一个暂存服务器。如果我使用特定的密钥,那么这是否会对此或其他Web应用程序产生潜在的负面影响,因为它是服务器农场的一部分?由于所有其他站点都运行在此服务器上,因此我对进行机器级更改感到有些不舒服。 - virtuesplea
不要在同一服务器群组中的所有框上使用相同的密钥。 - Massimiliano Peluso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接