Исключено исключение "Заполнение недопустимо и не может быть удалено" на 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 предоставляет варианты, которые иногда не работают, или, по крайней мере, почему они не используют по умолчанию надежный вариант.