Недавно Microsoft (12-29-2011) выпустила обновление для устранения ряда серьезных уязвимостей безопасности в .NET Framework. Одна из исправлений, введенных в MS11-100, временно смягчает потенциальную атаку DoS с участием столкновений хеш-таблиц. Похоже, это исправление разбивает страницы, содержащие много данных POST. В нашем случае на страницах с очень большими списками флажков. Почему это так?ASP.NET MS11-100: как я могу изменить лимит на максимальное количество опубликованных значений формы?
Некоторые неофициальные источники, по-видимому, указывают, что MS11-100 помещает лимит в 500 пунктов для обратной передачи. Я не могу найти источник Microsoft, который подтверждает это. Я знаю, что View State и другие функциональные возможности удовлетворяют некоторым из этих ограничений. Есть ли какой-либо параметр конфигурации, который контролирует этот новый предел? Мы могли бы отказаться от использования флажков, но это хорошо работает для нашей конкретной ситуации. Мы также хотели бы применить патч, потому что он защищает от других неприятных вещей.
Unofficial source discussing the 500 limit:
Бюллетень фиксирует вектор атаки DOS, обеспечивая ограничение на числа переменных, которые могут быть представлены для одного запроса HTTP POST . Предел по умолчанию - 500, который должен быть достаточным для обычных веб-приложений , но все же достаточно низкий, чтобы нейтрализовать атаку как , описанную исследователями безопасности в Германии.
EDIT: Исходный код с примером предела (который, как представляется, 1000, а не 500) Создание стандартного приложения MVC и добавьте следующий код в главном индексном:
@using (Html.BeginForm())
{
<fieldset class="fields">
<p class="submit">
<input type="submit" value="Submit" />
</p>
@for (var i = 0; i < 1000; i++)
{
<div> @Html.CheckBox("cb" + i.ToString(), true) </div>
}
</fieldset>
}
Этот код работал перед патчем. После этого он не работает. Ошибка:
[InvalidOperationException:. Операция недопустима из-за текущего состояния объекта]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +82 System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] байт, кодирование Кодирование) +111
System.Web.HttpRequest.FillInFormCollection() +307
Как насчет того, чтобы сделать дополнительную работу и разместить раздел, где он говорит конкретно 500. –
Вот и все. Нет раздела (от Microsoft). Только от неофициальных комментаторов, которые могут или не могут знать, о чем они говорят. В любом случае, я опубликовал ссылку и фрагмент. – colithium
@AndrewBarber Была ссылка на официальный бюллетень в исходном посте, я добавил еще один. – colithium