当前位置:首页 > 系统

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

happyfhb9年前 (2017-10-20)系统2315
摘要:在网上搜寻了很久看了很多关于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失败的解决办法” 的相关文章

如何解决打印机偏移故障

故障现象:一台爱普生300K-++打印机在打印文件时不能按预先设置打印,而是打印几行之后打印头便向右偏一段距离;再打印几行,又向右偏移一段距离,直到打印头碰到右侧挡板为止。故障分析:起初我认为是病毒引起的,可是经杀毒后,故障依旧。后经查找资料知道,这是打印机机械故障,主要是室内干燥、灰尘…

JUJUMAO XPSP2 2007增强版 我用过的最好的操作系统

JUJUMAO XPSP2 2007增强版 我用过的最好的操作系统我用过的最好用的操作系统。大家不要看他老但是这个系统真的很好用。基本上是原装正版。非常好。有需要的朋友 我可以通过QQ传给你。自己做维护装了几百个电脑了 感觉就这个系统最好用了。现在网上已经没有下载的了 我这里有iso镜像 可以刻录哦…

win7 administrator 帐户启用

Windows 7系统出于安全考虑,将系统超级管理员帐户(Administrator)隐藏了不允许“普通用户”使用。很多时候特别是安装一些应用软件时,由于兼容的问题普通权限的用户无法正常安装,需要启用超级管理员帐户然后可以在超级管理员账户安装,在标准用户下正常使用。如果你也想…

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

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

小技巧:修复windows 7收藏夹无法展开的问题

小技巧:修复windows 7收藏夹无法展开的问题

win7的资源管理器左侧的“收藏夹”提供了相当于“快捷方式”的功能。今天我的windows 7遇到了小问题,资源管理器的“收藏夹”无法展开,但“库”和“计算机”都可以。但点击&ld…

flv 中提取声音巧用千千静听

巧用千千静听提取flv文件中的音频方法:先将flv文件下载到电脑 可以使用维棠软件。然后用TTPLAY打开刚才下载的FLV文件,如图,‘图像类型’记得勾选所有文件,不然看不到下载下来的 .FLV文件哦!打开后就能听到音乐了,然后在TT播放列表里找到文件,点鼠标右键,有个&ld…

发表评论

访客

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