Сводка
Обновление безопасности Майкрософт MS11-100 ограничивает максимальное число ключей форм, файлов и членов JSON до 1000 в HTTP-запросе. Из-за этого изменения приложения ASP.NET отклоняют запросы, которые имеют более 1000 этих элементов. Http-клиенты, выполняющие такие запросы, будут отклонены, а в веб-браузере появится сообщение об ошибке. Сообщение об ошибке обычно содержит код состояния HTTP 500. Это новое ограничение можно настроить для каждого приложения. Инструкции по настройке см. в разделе "Разрешение".
Проблема
ASP.NET запросы с большим количеством ключей форм, файлов или полезных данных JSON получают от сервера ответ об ошибке. Журнал приложений на сервере содержит запись Предупреждение с источником, который является определенной версией ASP.NET, и идентификатором события 1309. Журнал событий содержит одно из следующих сообщений:
Сообщение 1:
Примечание
Сведения о приложении:
Домен приложения: /LM/W3SVC/1/ROOT/<App Domain>
Уровень доверия: средний
Виртуальный путь к приложению: <путь VDIR>
Путь к приложению: <путь к приложению>
Имя компьютера: <Имя компьютера>
Сведения о процессе:
Идентификатор процесса: 0001
Имя процесса: w3wp.exe
Имя учетной записи: IIS APPPOOL\DefaultAppPool
Сведения об исключении:
Тип исключения: HttpException
Сообщение об исключении. Недопустимые данные формы в кодировке URL-адреса.
в System.Web.HttpRequest.FillInFormCollection()
at System.Web.HttpRequest.get_Form()
at System.Web.HttpRequest.get_HasForm()
в System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
в System.Web.UI.Page.DeterminePostBackMode()
в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Сообщение 2:
Примечание
Сведения о приложении:
Домен приложения: /LM/W3SVC/1/ROOT/<App Domain>
Уровень доверия: средний
Виртуальный путь к приложению: <путь VDIR>
Путь к приложению: <путь к приложению>
Имя компьютера: <Имя компьютера>
Сведения о процессе:
Идентификатор процесса: 0001
Имя процесса: w3wp.exe
Имя учетной записи: IIS APPPOOL\DefaultAppPool
Сведения об исключении:
Тип исключения: InvalidOperationException
Сообщение об исключении. Операция недопустима из-за текущего состояния объекта.
в System.Web.HttpRequest.FillInFilesCollection()
at System.Web.HttpRequest.get_Files()
at FileUpload.Page_Load(Object sender, EventArgs e)
в System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
в System.Web.UI.Control.OnLoad(EventArgs e)
в System.Web.UI.Control.LoadRecursive()
в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint
Сообщение 3.
Примечание
Сведения о приложении:
Домен приложения: /LM/W3SVC/1/ROOT/<App Domain>
Уровень доверия: средний
Виртуальный путь к приложению: <путь VDIR>
Путь к приложению: <путь к приложению>
Имя компьютера: <Имя компьютера>
Сведения о процессе:
Идентификатор процесса: 0001
Имя процесса: w3wp.exe
Имя учетной записи: IIS APPPOOL\DefaultAppPool
Сведения об исключении:
Тип исключения: InvalidOperationException
Сообщение об исключении. Операция недопустима из-за текущего состояния объекта.
в System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
в System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
в system.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
в System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(Сериализатор JavaScriptSerializer, String input, Type type, Int32 depthLimit)
в System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(Строковые входные данные)
at Failing.Page_Load(Object sender, EventArgs e)
в System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
в System.Web.UI.Control.OnLoad(EventArgs e)
в System.Web.UI.Control.LoadRecursive()
в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
В файле журнала IIS отображается запись, похожая на следующую:
2011-01-01 00:00:00 ::1 POST /machine/default.aspx - 80 - ::1 - 500 0 0 187
Причина
Обновление системы безопасности Майкрософт, к которому относится бюллетень по безопасности MS11-100, изменяет максимальное число ключей форм, файлов и членов JSON, которые ASP.NET будут принимать в запросе, до 1000. Это изменение было внесено для устранения уязвимости типа "отказ в обслуживании", которая описана в бюллетене майкрософт по безопасности MS11-100.
Решение
Приложения, которые достигают этого ограничения для ключей форм или файлов, могут изменять ASP.NET appSetting aspnet:MaxHttpCollectionKeys, как показано ниже в файле конфигурации приложения ASP.NET. Этот параметр устраняет сообщения об ошибке 1 и 2 из раздела "Симптомы".
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>
Примечание
Если вы используете ASP.NET 1.1 в системе на базе x86, параметр корректируется путем добавления значения DWORD в следующий раздел реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Если вы используете ASP.NET 1.1 в системе на базе x64, параметр корректируется путем добавления значения DWORD в следующий раздел реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Приложения, которые достигли этого ограничения для полезных данных JSON, могут изменять ASP.NET appSetting aspnet:MaxJsonDeserializerMembers, как показано ниже в файле конфигурации приложения ASP.NET. Этот параметр устраняет сообщение об ошибке 3 из раздела "Симптомы".
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>
Примечание. Увеличение этого значения выше параметра по умолчанию повышает восприимчивость сервера к уязвимости типа "отказ в обслуживании", описанной в бюллетене по безопасности MS11-100.
Ссылки
Дополнительные сведения о бюллетене по безопасности MS11-100 см. в следующей статье TechNet:
Бюллетень по безопасности (Майкрософт) MS11-100 — критический Для получения дополнительных сведений щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:
2638420 MS11-100: уязвимость в платформа .NET Framework может привести к повышению привилегий: 29 декабря 2011 г.