Аннотация
Обновление для системы безопасности Microsoft MS11-100 ограничивает максимальное число ключей формы, файлов и членов JSON в HTTP-запросе тысячей. Из-за этого приложения ASP.NET отклоняют запросы, где число этих элементов превышает 1000. HTTP-клиенты, делающие подобные запросы, не будут обслуживаться, а в веб-браузере отобразится сообщение об ошибке. Обычно оно имеет код состояния HTTP 500. Это новое ограничение можно настраивать для отдельных приложений. Инструкции по настройке см. в разделе "Решение".
Проблема
Запросы ASP.NET с большим количеством ключей форм, файлов или значимых членов JSON, получают от сервера ответ об ошибке. В журнале приложения на сервере будет создано предупреждение с источником, указывающим конкретную версию ASP.NET, и идентификатором события 1309. Журнал событий будет содержать одно из следующих сообщений:
Сообщение 1.
Сведения о приложении:
Домен приложения: /LM/W3SVC/1/ROOT/<домен>
Уровень доверия: Средний
Виртуальный путь приложения: <виртуальный каталог>
Путь приложения: <путь>
Имя компьютера: <имя компьютера>
Сведения о процессе:
ИД процесса: 0001
Имя процесса: w3wp.exe
Имя учетной записи: IIS APPPOOL\DefaultAppPool
Сведения об исключении:
Тип исключения: HttpException
Сообщение об исключении: Данные формы, закодированные как URL-адрес, недействительны.
в System.Web.HttpRequest.FillInFormCollection()
в System.Web.HttpRequest.get_Form()
в 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/<домен>
Уровень доверия: Средний
Виртуальный путь приложения: <виртуальный каталог>
Путь приложения: <путь>
Имя компьютера: <имя компьютера>
Сведения о процессе:
ИД процесса: 0001
Имя процесса: w3wp.exe
Имя учетной записи: IIS APPPOOL\DefaultAppPool
Сведения об исключении:
Тип исключения: InvalidOperationException
Сообщение об исключении: Операция недопустима для текущего состояния объекта.
в System.Web.HttpRequest.FillInFilesCollection()
в System.Web.HttpRequest.get_Files()
в 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/<домен>
Уровень доверия: Средний
Виртуальный путь приложения: <виртуальный каталог>
Путь приложения: <путь>
Имя компьютера: <имя компьютера>
Сведения о процессе:
ИД процесса: 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 serializer, String input, Type type, Int32 depthLimit)
в System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
в 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
Причина
Обновление для системы безопасности Microsoft MS11-100 ограничивает в ASP.NET максимальное число ключей формы, файлов и членов JSON в HTTP-запросе тысячей. Это изменение внесено для устранения уязвимости к атакам типа "отказ в обслуживании", описанной в бюллетене по безопасности Майкрософт MS11-100.
Решение
В приложениях, где достигается это ограничение для ключей форм или файлов, можно изменить параметр ASP.NET aspnet:MaxHttpCollectionKeys, как показано в следующем примере файла конфигурации ASP.NET. Этот параметр позволяет устранить ошибку 1 и ошибку 2 в разделе "Проблема".
<configuration>
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>
</configuration>
Примечание. Если вы используете ASP.NET 1.1 на компьютере под управлением 32-разрядной системы, этот параметр можно изменить, добавив значение DWORD в следующий раздел реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
Если вы используете ASP.NET 1.1 на компьютере под управлением 64-разрядной системы, этот параметр можно изменить, добавив значение DWORD в следующий раздел реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0\MaxHttpCollectionKeys
В приложениях, где это ограничение достигается для членов JSON, можно изменить параметр ASP.NET aspnet:MaxJsonDeserializerMembers, как показано в следующем примере файла конфигурации ASP.NET. Этот параметр позволяет устранить ошибку 3 в разделе "Проблема".
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>
Примечание. Увеличение описанного выше значения повышает восприимчивость сервера к атакам типа "отказ в обслуживании", описанным в бюллетене по безопасности MS11-100.
Ссылки
Для получения дополнительных сведений об информационном бюллетене безопасности ознакомьтесь со следующей статьей TechNet:
Бюллетень по безопасности Майкрософт MS11-100: важно. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
2638420 MS11-100: уязвимость .NET Framework может привести к несанкционированному получению прав: 29 декабря 2011 г.