Исключено исключение "Заполнение недопустимо и не может быть удалено" на WebResource.axd

У меня есть приложение ASP.NET 2.0, которое отлично работает в нашей локальной среде. При публикации на тестовом сервере мы получаем прерывистые ошибки на сервере.

Здесь наиболее распространены:

Заполнение недопустимо и не может быть удалено. Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека, чтобы получить дополнительную информацию об ошибке и где она возникла в коде.

Сведения об исключении: System.Security.Cryptography.CryptographicException: Заполнение недопустимы и не может быть удалены.

Ошибка источника:

Создано необработанное исключение во время выполнения текущего веб-запрос. Информация о происхождение и местоположение исключения могут быть идентифицированы с использованием исключения трассировка стека ниже.

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

[Криптографическое исключение: заполнение недействителен и не может быть удален.]
System.Security.Cryptography.RijndaelManagedTransform.DecryptData(байт [] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte [] & OUTPUTBUFFER, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) +1545747
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(байт [] inputBuffer, Int32 inputOffset, Int32 inputCount) +257
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +30 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte [] buf, модификатор Byte [], Int32 start, Int32 length, Boolean использованиеValidationSymAlgo) +164
System.Web.UI.Page.DecryptString(String s) +83
System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext контекст) +148
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean & completedSynchronously) +64

Это происходит при запросе к определенному запросу WebResource.axd.

Другая ошибка, которую мы видим, следующая:

Не удалось выполнить проверку MAC-адреса viewstate. Если это приложение размещено в Интернете Ферма или кластер, убедитесь, что  настройка конфигурации тот же валидационный ключ и проверка алгоритм. AutoGenerate не может использоваться в кластере. Описание: необработанное исключение произошло во время выполнение текущей сети запрос. Просмотрите трассировку стека для получения дополнительной информации об ошибке и где он возник в коде.

Сведения об исключении: System.Web.HttpException: проверка MAC-адреса viewstate. Если это приложение размещено веб-фермой или кластера, убедитесь, что конфигурации validationKey и проверка алгоритм. AutoGenerate не может использоваться в кластере.

Эта ошибка иногда возникает при отправке формы.

Теперь перед тем, как вы вскочите и скажете мне очевидный (обычный) ответ на эту ошибку, рассмотрите это:

  • Приложение развертывается в Windows Server 2003 на IIS6
  • Это НЕ на веб-ферме. Здесь используется только один веб-сервер.
  • Идентификатор пула приложений - это пользовательская учетная запись службы, и я выполнял aspnet_regiss -ga <username> на сервере. Нет эффекта.

Ответ 1

Ошибка в том, что ваш appdomain был повторно использован/перезапущен. Когда это произойдет, приложение и машинный ключ будут настроены на автоматический, он изменится. Это влияет на дешифрование информации в URL-адресе ресурсов urls (.axd). Настройка фиксированного машинного ключа предотвратит его повторение.

Пожалуйста, проверьте это для получения дополнительной информации о подобном случае (объяснение связано с проблемой проверки валидности, но причина одна и та же): http://www.developmentnow.com/blog/InvalidViewstate+Or+Unable+To+Validate+Data+Error.aspx

Я тоже долго размышлял об этом. После того, как я увидел этот вопрос, он снова включил меня: Является ли это попыткой нарушить безопасность сайта ASP.Net?... на который я просто ответил очень одна и та же. У меня было ощущение, что это было вокруг некоторого перезапуска чего-то, потому что, когда мы опубликовали что-то, что переработало приложение, ошибка показала в журнале, но у меня не было другого источника, указывающего его отношение (сегодня я нашел этот случай в invalidviewstate из-за смена машинного ключа:))

Ps. выше, наконец, объясняет это на одном сервере:)

Ответ 2

Эта проблема возникает, когда сообщение создается до того, как страница полностью загружена в браузере. Посмотрите этот вопрос.

Ответ 3

Бен

Для вашей первой проблемы я обнаружил, что это похоже на то, что вы видите в том, что проблема возникает спорадически. Вы должны найти полное объяснение этого в http://www.codeproject.com/KB/security/Cryptor.aspx#aes.

Вам действительно нужно установить RijndaelAlg.Padding в PaddingMode.ISO10126, PaddingMode.PKCS7 или PaddingMode.ANSIX923. Любое из этих трех значений должно работать, при условии, что вы используете одно и то же значение при шифровании и расшифровке. Другие значения будут работать с некоторыми данными, но не со всеми данными. Вышеприведенный URL объясняет, почему.

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