Нещодавно (12-29-2011) Microsoft випустила оновлення для вирішення кількох серйозних вразливих місць безпеки в .NET Framework. Одне з виправлень, введених MS11-100, тимчасово пом’якшує потенційну атаку DoS, пов’язану зі збоями хеш-таблиць. Здається, це виправлення розбиває сторінки, які містять багато даних POST. У нашому випадку на сторінках, які мають дуже великі списки прапорців. Чому це було б так?
Деякі неофіційні джерела, схоже, вказують на те, що MS11-100 встановлює обмеження в 500 на позиції після зворотного зв'язку. Я не можу знайти джерело Microsoft, яке це підтверджує. Я знаю, що функція View State та інші рамкові функції з'їдають частину цієї межі. Чи є якісь налаштування конфігурації, які керують цим новим обмеженням? Ми можемо перейти від використання прапорців, але це працює досить добре для нашої конкретної ситуації. Ми також хотіли б застосувати патч, оскільки він захищає від деяких інших неприємних речей.
Неофіційне джерело, що обговорює межу 500:
Бюлетень фіксує вектор атаки 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 (Системні байоди)
. HttpRequest.FillInFormCollection () +307