当前位置:首页 > 系统

验证视图状态MAC失败的解决办法

happyfhb9年前 (2017-10-20)系统2353
摘要:在网上搜寻了很久看了很多关于MAC验证视图状态失败的解决方法。大部分人都说是在页里或web.config里加EnableEventValidation="false" EnableViewStateMac="false" ViewStateEncryption…

在网上搜寻了很久看了很多关于MAC验证视图状态失败的解决方法。大部分人都说是在页里或web.config里加

EnableEventValidation="false" EnableViewStateMac="false" ViewStateEncryptionMode="Never" 这些属性的设

置。但是这并不从根本上解决问题,相反这样做了反而更加不安全。

  为了解决问题我继续收集资料,不经意的发现了一个网页里讲到一个Blog系统从NET1.1升级到NET2后,之前所生

成的所有cookies将会失效,因为NET2和NET1使用的machineKey不一样。哈哈,真是恍然大悟啊!

WEB应用中经常遇到采用集群或负载均衡交换机等方式实现多服务器共同对外提供服务,分担压力。在这样的环境下

如果Asp.Net程序执行时碰到如下中文错误:

“验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的

validationKey 和验证算法。不能在群集中使用 AutoGenerate。”

或如下英文错误:

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure

that <machineKey> configuration specifies the same validationKey and validation algorithm.

AutoGenerate cannot be used in a cluster.

则说明多台WEB服务器上的WEB应用程序没有使用统一的machineKey导致的。


那么machineKey的作用是什么呢?

按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密

和解密,并将其用于对进程外会话状态标识进行验证。”

也就是说Asp.Net的很多加密,都是依赖于machineKey的设置,例如Forms 身份验证 Cookie、ViewState的加密。

默认情况下,Asp.Net的配置是自己动态生成,validationKey和decryptionKey的默认值是AutoGenerate。如果单台

服务器当然没问题,但是如果多台服务器负载均衡,machineKey还采用动态生成的方式,每台服务器上的machinekey

值不一致,就导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一

定要在每台站点配置相同的machineKey。至此真相水落石出,立刻在web.config中添加关于machineKey的配置项,并

手动设置其中的密钥值,这里请注意,不同加密算法对于密钥的最大字符长度是不同的,在这里能够使用的有AES,

DES,3DES,SHA1,MD5,我只知道DES的密钥字符长度为16,3DES长度为48,手动设置时密钥长度必须等于其最大长

度,否则会出错!至于密钥的16进制值可以随便输入。

参考的web.config 中matchineKey配置:

  <system.web>
    <machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211"

decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" decryption="3DES"/>
  </system.web>


好了,问题得已解决!希望广大朋友遇到MAC验证视图状态失败的问题的时候,不要马上把

EnableViewStateMac="false"设置成这样就完事了。先分析什么原因导致了这个错误的发生,禁用掉

EnableViewStateMac验证是可以解决问题,但这不是根本的,起码是牺牲了一定的安全性!


扫描二维码推送至手机访问。

版权声明:本文由海海日记-冯海滨博客发布,如需转载请注明出处。

本文链接:http://www.fenghaibin.com/?id=1262

“验证视图状态MAC失败的解决办法” 的相关文章

禁止自己的电脑浏览器打开某网站

用记事本打开C:\WINDOWS\SYSTEM32\DRIVErS\ETC\下的HOSTS文件,C盘为系统盘 如果系统装在其他盘 那么盘符就是其他盘的盘符。对应的127.0.0.1 localhost下追加127.0.0.1 www.baidu.com(比如这里在打开百度时跳转到本地的127.0.0…

磁盘引导分区得作用

我这里得每一篇文章都是我得经验所在,都写出来给大家分享。以前得时候做系统得时候不了解引导分区,某一天盘符乱了 我自己在磁盘管理器里面修改了一下盘符,结果不小心把引导分区给弄掉了,结果启动机器找不到引导分区。正常情况下 就得在dos里面找回系统分区表了 非常麻烦。现在好了 不知道大家有没有接触过win…

如何正确使用笔记本电池

一、    激活电池(购买后第一次使用电池或长时间不使用电池)随机所配的笔记本电池为高能锂离子电池,在第一次使用前请按如下方法操作激活电池:初次使用锂离子电池时,电池内可能只有很少的残余电量,需要先给电池放电后再充电。在关机状态下充电。电池充满电后,就可以使用了。前三次使用时要将…

SATA硬盘AHCI模式进系统蓝屏的解决办法

首先说明,XP系统不支持 硬盘AHCI模式 进行安装 安装就会出现蓝屏的现象。解决办法将硬盘模式改成IDE 在安装OK 问题搞定了。还有部分PC机装服务器操作系统会出现各种各样的问题。没有很好的办法改成XP就好啦。…

图片和传真查看器打不开图片的解决办法

不知道怎么搞最近图片打不开,打开进程,双击一个图片后,只见一个rundll32.exe的进程一闪而过,猜想是没有成功加载DLL,可打开图片的是哪个DLL是哪呢,我也清楚,到google一查,好多方法,其实效果都是一样的,都注册一个shigmvw.dll这个DLL,把下面的命令在运行里执行,OK图片可…

Q8键盘灯不会亮的解决方法

不是机器问题 你想键盘灯的话 长按键盘左下角有个 短信符号的键就可以了。这是我在网上看到的。呵呵 慢慢研究Q8。…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。