Исключение «Заполнение недопустимо и не может быть удалено» на WebResource.axd - PullRequest
30 голосов
/ 21 ноября 2008

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

Вот самые распространенные:

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

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

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

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

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

[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, длина Int32, логическое значение useValidationSymAlgo) + 164
System.Web.UI.Page.DecryptString (String с) + 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 шаг, логическое и завершено синхронно) + 64

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

Другая ошибка, которую мы видим, это:

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

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

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

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

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

Ответы [ 3 ]

24 голосов
/ 06 марта 2009

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

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

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

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

1 голос
/ 21 ноября 2008

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

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

Бен,

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

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

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

...