0

在最近的负载测试中,我遇到了一些奇怪的“索引超出范围异常”

堆栈跟踪:

 at System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
   at System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
   at System.Security.Cryptography.CryptoStream.FlushFinalBlock()
   at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo)
   at System.Web.UI.Page.DecryptString(String s)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

我们没有使用农场或集群,我也没有在应用程序中使用任何密码学。

这似乎发生在幕后的 .Net 类中。

我认为这与视图状态有关,但我不知道为什么会抛出这个。

有任何想法吗?

4

2 回答 2

1

如果有人发起一个帖子,应用程序开始发送带有所有 500KB 视图状态的帖子。在回发的中途,用户感到无聊并点击了其他内容。浏览器仅使用部分视图状态切断回发。服务器抛出一个错误,说视图状态是 borked。我猜这是一个启用了视图状态加密功能的 2.0 应用程序。解决方案是更积极地管理视图状态大小。

当恶意用户制作自定义回发响应时,更有可能发生事件验证异常,因此我认为这里不涉及事件验证。

于 2008-12-04T02:32:59.853 回答
0

只是猜测:您是否在网站上禁用了 EventValidation?听起来有些东西正在尝试创建手动回发或以其他方式将数据直接插入到 http 请求的发布数据中,并且没有计算出 viewstate 字段的正确值。这反过来又导致解密失败。

启用 EventValidation 后,即使他们正确计算了所有内容,您也会收到异常,但至少这是一个有意义的异常。

于 2008-11-25T17:14:25.410 回答