解决视图状态消息验证代码 (MAC) 错误

https://blog.csdn.net/bingtingabc/article/details/49148745

 

2015年10月15日 10:05:56  阅读数:3397  

什么是视图状态?

视图状态是指在 ASP.NET 应用程序的 WebForms (.aspx) 页面中往返的信息。__VIEWSTATE 字段的 HTML 标记如下所示:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="..."/>
例如,可以将按钮控件的文本存储在 __VIEWSTATE 字段中。如果用户单击该按钮,则 Button_Click 事件处理程序将能够从视图状态字段中提取该按钮的文本。有关 ASP.NET 视图状态的更详细概述,请参阅 Microsoft Developer Network (MSDN) 网站上的 ASP.NET 视图状态概述主题。

由于 __VIEWSTATE 字段包含用于在回发时重建页面的重要信息,因此请确保攻击者无法篡改此字段。如果攻击者提交恶意的 __VIEWSTATE 负载,则攻击者可能会诱骗应用程序执行本不会执行的操作。

若要避免此类篡改攻击,可以使用消息验证代码 (MAC) 来保护 __VIEWSTATE 字段。回发时,ASP.NET 会验证与 __VIEWSTATE 负载一起提交的 MAC。在 Web.config 文件中,应用程序 元素中指定了用于计算 MAC 的密钥。由于攻击者无法猜测 <machineKey> 元素的内容,因此也就无法在试图篡改 __VIEWSTATE 负载时提供有效的 MAC。ASP.NET 会检测到有效的 MAC 没有提供,并拒绝此恶意请求。   _________________________________________________________________________________________________________ 按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状 态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。”也就是说Asp.Net的很多加密, 都是依赖于machineKey里面的值,例如Forms 身份验证 Cookie、ViewState的加密。默认情况下, Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡, machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一 致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的 machineKey。 
------------------------------------------------------------------------------------
  查下MSDN就明白了,validationKey和decryptionKey的默认值是AutoGenerate,由系统随机生成密钥 ,如果在本地或者使用的是独立主机通常不会有什么问题,但是使用虚拟主机,一台服务器上有多个虚拟 主机存在时就会出现以上问题,MSDN中也特别指出不能在群集中使用 AutoGenerate应该指定固定的密钥 值,至此真相水落石出,立刻在web.config中添加关于machineKey的配置项,并手动设置其中的密钥值, 这里请注意,不同加密算法对于密钥的最大字符长度是不同的,在这里能够使用的有AES,DES,3DES, SHA1,MD5,我只知道DES的密钥字符长度为16,3DES长度为48,手动设置时密钥长度必须等于其最大长度 ,否则会出错!至于密钥的16进制值可以随便输入。 参考的matchineKey配置: <system.web>
    <machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" decryption="3DES"/>
     </system.web> 
方案二 <pages validateRequest="false"/>改为: <pages enableEventValidation="false" viewStateEncryptionMode ="Never" />   自我分析: 要么是两台服务器的文件不一致 添加上machineKey 后就可以解决访问的是同一个程序 <machineKey validationKey="90C28AC11E1522312CC38F3C650F8429C6C6F9C1CF0ADEE230911763106B0E" decryptionKey="9231F8824A9F9F1601B510F93D084A78B05BAA2907F3E723" decryption="3DES" validation="SHA1"/>  

原文地址:https://www.cnblogs.com/kelelipeng/p/10767435.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


现在给大家介绍一下如何查询MAC的生产日期,希望对你查询MAC的生产日期操作有所帮助。
1、点击【编辑虚拟机设置】,转到【CD/DVD (SATA)】,选中【使用 ISO 映像文件】复选框,点击【浏览】,找到已经准备好的 MacOS Ventura 镜像;4、客户机操作系统下,选择【Apple Mac OS X】,版本选择大家需要的【macOS版本】,再点击【下一步】;7、完成【抹掉】后,左上角关闭该窗口,返回上一界面,选择【Install macOS】,正式进入苹果系统安装流程;1、打开 Vmware Workstation,然后点击左上角的【文件】,打开的下拉项中,选择【新建虚拟机】;
注意:用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本。一般情况 pip 对应的是 Python 2.7,pip3 对应的是 Python 3.x。pip介绍:pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。1.打开后输入python3确定电脑上是否已安装python3,如果输入python是查看mac上的自带版本。如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。如下图是已经成功安装pip的状态。
Mac 安装nvm
Mac(M1)安装VMware虚拟机及Linux系统
Mac 如何安装 Telnet,mac安装telnet命令
是不是对键盘输入厌烦了?那你可以试试语音输入。 你可以按照下面的步骤打开Mac的语音输入功能。 以 macOS Catalina 为例: Step 1. 点击屏幕左上角的图标,点击【系统偏好设置】。
1.clean my Mac&#160;x 2.Cleaner One Pro 3.App Cleaner
按caps lock键。 CapsLock键,短按切换中英文,长按切换大小写。
windows: 1.PowerToys 2.不用软件进行分屏 Windows 10技巧1:窗口1/4分屏 - Acer Community 介绍说明 从Win7时代开始,微软便引入了屏幕热区概念,即
https://zhuanlan.zhihu.com/p/111111684 下载地址: https://www.smoothscroll.net/mac/
https://support.apple.com/zh-cn/guide/imac/apd2e7352054/mac 浏览:24 英寸&#160;iMac 24 英寸&#160;iMac 比以往更个
在Mac自带的中文输入法中,“反斜杠”键(“\”)就是顿号。
1.系统偏好设置。 2和3步如下图: 注意:在设置后,启用capslock大写的时候,需要长按capslock键。
Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别。即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编辑器的有编辑栏和显示栏。简洁美观实时预览扩展语法跨平台免费Typora现在收费,但你仍然可以在官方网站上找到历史版本。虽然新版本仍然值得收费,但免费版本仍然可以使用。httpshttpshttpshttpshttpshttpshttpshttps。......
Mac M1安装Centos7
连接为官方下载链接, 直接复制MD5可迅雷下载亲测可用, 和付费版使用体验无差别.1. Windows 64bithttps://download.typora.io/windows/typora-setup-x64-0.11.18.exeMD5:12F96372BEE2951ACF5627EA28F8A389**2. Window 32bit **https://download.typora.io/windows/typora-setup-ia32-0.11.18.exeMD5:F5036
ubuntu22.04 、系统安装、win双系统、Ubuntu分区、Ubuntu优化、美化gnome tweaks,扩展、macos、搜狗输入法、wps字体、微信安装、navicat15、java开发环境搭建、idea 输入法问题处理、双系统问题、github慢等等。史上最全保姆级Ubuntu使用教程
MAC怎么获取文件路径 MAC获取文件路径的四种方法