Странная ошибка в .net приложении. - RijndaelManaged - PullRequest
0 голосов
/ 25 ноября 2008

Во время недавнего нагрузочного теста я получил странное «исключение индекса вне диапазона»

Трассировка стека:

 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.

Я полагаю, это как-то связано с viewstate, но я не могу понять, почему это происходит.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 04 декабря 2008

Если кто-то инициирует сообщение, приложение начинает отправлять сообщение со всеми 500 КБ viewstate. На полпути через обратную передачу пользователю становится скучно и он щелкает чем-то другим. Браузер отключает обратную передачу только частью состояния просмотра. Сервер выдает ошибку, которая говорит, что состояние представления является borked. Я предполагаю, что это приложение 2.0 с включенной функцией шифрования viewstate. Решение состоит в том, чтобы более агрессивно управлять размером представления.

Исключения при проверке событий более вероятны, когда злоумышленник создает пользовательский ответ обратной передачи, поэтому я не думаю, что проверка события здесь.

0 голосов
/ 25 ноября 2008

Просто предположение: вы отключили EventValidation на сайте? Похоже, что-то пытается создать ручную обратную передачу или иным образом вставить данные непосредственно в данные публикации http-запроса, и не вычислено правильное значение для поля viewstate. Это, в свою очередь, приводит к впечатляющей неудаче дешифрования.

При включенном EventValidation вы получите исключение, даже если они все правильно рассчитают, но по крайней мере это значимое исключение.

...