【发布时间】:2011-01-08 19:37:28
【问题描述】:
我正在管理的网络应用程序出现问题。用户开始偶尔收到以下错误:
视图状态 MAC 验证失败。如果 此应用程序由 Web 托管 场或集群,确保 配置指定 相同的validationKey和validation 算法。无法使用自动生成 在一个集群中。
问题在于它不是一个集群——它是一个单一的 Windows 2003 服务器。在四处挖掘之后,似乎在我的 web.config 中的 Pages 指令中添加一个 machineKey 部分和一些额外的属性可以解决这个错误:
<machineKey validationKey='MACHINE KEY SNIPPED'
decryptionKey='DECRYPTION KEY SNIPPED'
validation='SHA1'/>
<pages validateRequest="true" enableEventValidation="false">
在我的 web.config 中更改这两件事后,错误消失了,但是 现在我遇到了一个新问题 - 我的视图状态无效的错误,应用程序只是“忘记”我的用户是谁,并将它们发送回登录页面。现在,用户正在浏览应用程序,然后他们意外地被发送到登录页面,即使他们已经登录了几分钟。虽然我不能强迫这种情况发生,但它通常发生在访问 10-12 个不同的页面时,非常频繁。
我很想解决这个问题 - 有没有人知道还有什么可能导致单个服务器上的视图状态错误,或者我可以做些什么来确保它得到正确验证?
【问题讨论】:
-
永远不要关闭事件验证。您想要执行此操作的时间非常有限,并且试图解决导致您的应用程序池回收的问题并不是那些时间之一。现在,如果攻击者知道他们在做什么,他们将能够触发您页面上禁用甚至隐藏控件的事件。
-
你在做url重写吗?如果是这样,是否将 url 设置为与页面匹配,表单验证?更改表单验证 toasts 视图状态并显示相同的错误消息..
标签: asp.net asp.net-2.0 viewstate