ASP.NET MS11-100: как изменить ограничение на максимальное количество отправленных значений формы?

Недавно (29.12.2011) Microsoft выпустила обновление, устраняющее несколько серьезных уязвимостей в системе безопасности .NET Framework. Одно из исправлений, внесенных в MS11-100 , временно смягчает потенциальную DoS-атаку, связанную с конфликтами хеш-таблиц. Похоже, это исправление нарушает работу страниц, содержащих много данных POST. В нашем случае на страницах с очень большими списками флажков. Почему это так?

Некоторые неофициальные источники, похоже, указывают на то, что MS11-100 устанавливает лимит в 500 для элементов обратной передачи. Я не могу найти источник Microsoft, подтверждающий это. Я знаю, что состояние просмотра и другие функции фреймворка частично снимают этот предел. Есть ли какой-либо параметр конфигурации, который управляет этим новым пределом? Мы могли бы отказаться от использования флажков, но в нашей конкретной ситуации это работает довольно хорошо. Мы также хотели бы применить патч, потому что он защищает от других неприятностей.

Неофициальный источник, обсуждающий ограничение в 500:

Бюллетень исправляет вектор атаки DOS, предоставляя ограничение на количество переменных, которые могут быть отправлены для одного HTTP POST запрос. Предел по умолчанию - 500, что должно быть достаточно для нормального веб-приложений, но все еще достаточно низкий, чтобы нейтрализовать атаку, поскольку описан исследователями безопасности в Германии.

РЕДАКТИРОВАТЬ: Исходный код с примером лимита (который составляет 1000, а не 500) Создайте стандартное приложение MVC и добавьте следующий код в главное представление индекса:

@using (Html.BeginForm()) 
{
    

@for (var i = 0; i < 1000; i++) {
@Html.CheckBox("cb" + i.ToString(), true)
}
}

Этот код работал до исправления. После этого не работает. Ошибка:

[InvalidOperationException: операция недействительна из-за текущего состояние объекта.]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded () +82 System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] bytes, Encoding encoding) +111
System.Web.HttpRequest.FillInFormCollection () +307

196
задан Michiel van Oosterhout 3 January 2012 в 04:11
поделиться