2

我们有在 IIS 7.5 上运行的 asp.net (v3.5) 网站,我们的应用程序池在 2.0 中。该站点还位于具有粘性会话的负载平衡服务器场上。平均而言,我们每天会收到大约 200 到 300 个视图状态错误,而回发错误是每天 1,000 到 2,000 个。

具有最多回发错误的页面包含一个 asp 数据列表,其中绑定了许多项目。以及用于过滤和分页的下拉菜单,以及一些回发的 asp 超链接。

对于视图状态,这些页面使用 ajax 选项卡、asp 超链接、模式弹出扩展器和 asp 下拉菜单。

该网站确实获得了大量的流量,并且有许多机器人,如谷歌和 MSN 访问它。

我们尝试了以下方法:

  • 在某些控件上禁用视图状态以最小化视图状态大小
  • 将视图状态移动到数据库中
  • 压缩视图状态
  • 将视图状态移动到页面底部

以上都没有帮助我们解决我们的问题。

非常感谢您解决此问题的任何帮助,谢谢。

更新错误信息:

  • 视图状态

错误来源:System.Web

错误尝试/捕获:System.Web.UI.ViewStateException:无效的视图状态。客户端 IP :.. . 港口: *** 用户代理:Mozilla/4.0(兼容;Synapse)视图状态:00ytitesern5vnudvqgz rneo/nncjwe2gqvm9hwsejfneaemuijx m43rkjqdgmurhezuvzjtw fcu/cbzrx0xfscog4bv07c1fi7ali/883amvbby5owiliaihufk4fvbn1wgarkbwxmmionsf0jcgw6wlnppj3ww8nmd3 423pu91yexxuyuygxpnu9osgzvxre5wfjlhlhg4ngo1bxdgekgfilzqbxjq58w2aqc7gvdj1ytz4xshkzvjdldiecewgfokt/ot2cpecb bavgiy2f/lvfjg4h9kmuvumsgrbkc6enfnfa0eqce2fi2hj3jo1qqchwsvty8l9uaq6k8oq6ctsggrtyr3xnd 654w6nmldj w8 u vvbaez6hm5zofqxnfrzobik6qbqq5dd7qrozuiu abdvgg xaa5jjm9o5/rroxkrx2fzzhkzjij0xc9p6jenvht 0mplciq4xnewyotosx86axuioyb0yww2phkothy2zok7j2q/ xz4j29zz2drnmqj1km 3j mofii0kk0qe0/s8mkotmhtk4k rfyfja/h7wtebpualg3hg9ydru3yn6pfimay2aasoloydvmj/xfffd tknfqeg7da7/n2flq6hczcolanyjsxf9ofstomby4flhcyuuq/hqg7pc8qvrqy0s/seqyqkr 1ne7bktrazjwlgygpprawneml8f1kbujtbjtz7feieyzu76j1mntagwlrhgchwjmux58cjlu2bbh7ayitfevapzt21pn92du5zcnmiajfxfou1motqkl8hqmlbjj0hxhpi5j5gg5xdxpz5xkqfdflw2wgqfjxilhqm6mwyjsmif6r8wtdjkrsxxmapyeq61lfa18 70sntc2v z3cfy...

错误信息:视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保 |machineKey| 配置指定相同的validationKey 和验证算法。AutoGenerate 不能在集群中使用。

HttpErrorCode:500

堆栈跟踪:在 System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) 在 System.Web.UI.Util.DeserializeWithAssert 的 System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMes​​sage, Boolean macValidationError) (IStateFormatter 格式化程序,String serializedState)在 System.Web.UI.HiddenFieldPageStatePersister.Load() 在 System.Web.UI.Page.LoadPageStateFromPersistenceMedium() 在 System.Web.UI.Page.LoadAllState() 在 System.Web.UI。 Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest() 在 System.Web.UI.Page.ProcessRequest( HttpContext 上下文)在 ASP.content_aspx。System.Web.HttpApplication.ExecuteStep 的 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 处的 ProcessRequest(HttpContext 上下文)(IExecutionStep 步骤,布尔值和同步完成)

浏览器:Mozilla/4.0(兼容;Synapse)

  • 回发错误来源:System.Web

错误尝试/捕获:System.ArgumentException:回发或回调参数无效。使用 |pages enableEventValidation=|true|/| 启用事件验证 在配置中或 |%@ 页面 EnableEventValidation=|true| %| 在一个页面中。出于安全目的,此功能验证回发或回调事件的参数是否源自 **_sQueEl_clean 最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。在 System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) 在 System.Web.UI.WebControls.TextBox.LoadPostData(String postDataKey, NameValueCollection postCollection) 在 System.Web.UI.Page.ProcessPostData(NameValueCollection postData,

错误信息:类型异常 |System.Web.HttpUnhandledException| 被抛出。

HttpErrorCode:500

堆栈跟踪:在 System.Web.UI.Page.HandleError(Exception e) 在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint ) 在 System.Web.UI.Page.ProcessRequest() 在 System.Web.UI.Page.ProcessRequest(HttpContext context) 在 ASP.category_aspx.ProcessRequest(HttpContext context) 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web。 System.Web.HttpApplication.ExecuteStep 处的 HttpApplication.IExecutionStep.Execute()(IExecutionStep 步骤,布尔值&完成同步)

浏览器: Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25

4

2 回答 2

1

场中所有服务器上的机器密钥 ( http://msdn.microsoft.com/en-us/library/w8h3skw9%28v=vs.71%29.aspx ) 值是否相同?

于 2013-03-13T15:28:02.933 回答
0

我见过类似的问题,经过调查,我们能够得出结论,这是由垃圾邮件机器人攻击我们的网站引起的 - 即在没有首先获得正确的视图状态的情况下尝试提交值,并且视图状态正在执行它的设计目的(保护您的回发免受无效数据的影响 - 恶意或其他)。

我预计,这可能也是您所看到的。如果您遇到了许多机器人,例如 Google 和 MSN,那么几乎可以肯定您也遇到了糟糕的机器人。

参考这些 SO 搜索结果:https ://stackoverflow.com/search?q=asp.net+spambot

这样的文章可能有助于减轻您对错误的担忧。

令我感到奇怪的是,错误消息让我们疯狂地试图检测复杂的内部问题,而不是仅仅明确说明“在野外,这种情况最简单和最可能的原因”是您被垃圾邮件机器人击中”,并附有一些建议或文章来参考建议如何确认这一点。

于 2013-03-13T14:05:43.287 回答