【问题标题】:'Validation of viewstate MAC failed' problem, no load-balancing, cluster or server farm“视图状态 MAC 验证失败”问题,无负载平衡、集群或服务器群
【发布时间】:2011-07-25 09:22:17
【问题描述】:

这是我们在许多网站上遇到的一个特别无用且困难的问题。这些是相当高流量和复杂的网站,但它们都在一个盒子上——没有负载平衡或网络农场。很难可靠地重现,但任何关于潜在修复的想法都将不胜感激。

强调一下,问题是间歇性发生的(可能是 100 分之一?),在这个阶段,我无法隔离导致问题的网站上的任何特定操作。

我们能想到的唯一真正的解决方案是将网站转换为 MVC,但正如您可以想象的那样,这是一项非常艰巨的任务。

网站采用 .NET3.5 构建,显然是基于 Web 表单的,托管在运行 Windows Server 2008 标准、32 位、IIS7、以“经典”模式运行的应用程序池的机器上。

【问题讨论】:

  • 您需要提供有关导致错误的更多详细信息。这是一个太宽泛的问题,我无法弄清楚任何事情。我通常会在不正确的跨页发布时看到此错误。
  • 我正在尽我所能获得额外的信息,相信我。我会尽快添加更多信息。
  • 如果有人修改 ViewState,MAC 验证也会失败(因此首先使用 MAC 的原因)。您是否排除了故障不是由于扫描工具或用户故意操作造成的?该应用程序预计会在“__VIEWSTATE=1”或“__VIEWSTATE=
  • 当用户进行回发以提交表单时,肯定会出现问题;即不是仅在查看内容时。我们从客户的用户群中获得了足够的信息来排除对视图状态的任何故意操纵。用户是否有可能只是在整个视图状态通过初始响应之前快速提交表单?
  • 好的,我可以通过离开登录表单很长时间然后填写表单并点击提交来重现此错误。在搜索“viewstate expire”并阅读更多内容后,我尝试在我的 Web.config 中手动设置 <machineKey ... /> 元素,如果它有效,我会将其作为答案。

标签: .net viewstate mac-address


【解决方案1】:

好的,我可以通过长时间离开登录表单然后填写表单并点击提交来重现此错误。在搜索“viewstate expire”并阅读更多内容后,我尝试在我的 Web.config 中手动设置元素。

要添加到 Web.config 文件的特定元素是:

<system.web>
  <machineKey
    validationKey="EEF33150A048D162D22CB36E1CB9956B148C7A4E6999D0F05B53D416D7A16F83823DD626F501DD3549D3E5DCB473634739D0AD9A07F71560946498C943A7586D"
    decryptionKey="0E95F75864047EB6322EA7D5246F2C1175D77A1B016F293C3BAAD000299A3DC8"
    validation="SHA1"
    decryption="AES" />
</system.web>

validationKeydecryptionKey 属性中的值只是随机生成的十六进制数字,但需要分别正好是 128 和 64 字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2016-05-23
    • 2015-09-19
    相关资源
    最近更新 更多