Microsoft baru-baru ini (12-29-2011) merilis pembaruan untuk mengatasi beberapa kerentanan keamanan serius dalam .NET Framework. Salah satu perbaikan yang diperkenalkan oleh MS11-100 sementara mengurangi potensi serangan DoS yang melibatkan tabrakan tabel hash. Tampaknya perbaikan ini merusak halaman yang berisi banyak data POST. Dalam kasus kami, pada halaman yang memiliki daftar kotak centang sangat besar. Mengapa demikian?
Beberapa sumber non-resmi tampaknya menunjukkan bahwa MS11-100 menempatkan batas 500 pada item pos balik. Saya tidak dapat menemukan sumber Microsoft yang mengkonfirmasi ini. Saya tahu bahwa Lihat Status dan fitur kerangka kerja lainnya memakan sebagian dari batas ini. Apakah ada pengaturan konfigurasi yang mengontrol batas baru ini? Kami dapat beralih dari menggunakan kotak centang tetapi ini bekerja dengan baik untuk situasi khusus kami. Kami juga ingin menerapkan tambalan karena melindungi terhadap beberapa hal buruk lainnya.
Sumber tidak resmi membahas batas 500:
Buletin memperbaiki vektor serangan DOS dengan memberikan batasan jumlah variabel yang dapat diajukan untuk satu permintaan HTTP POST. Batas default adalah 500 yang seharusnya cukup untuk aplikasi web normal, tetapi masih cukup rendah untuk menetralisir serangan seperti yang dijelaskan oleh para peneliti keamanan di Jerman.
EDIT: Kode sumber dengan contoh batas (yang tampaknya 1.000, bukan 500) Buat aplikasi MVC standar dan tambahkan kode berikut ke tampilan indeks utama:
@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>
}
Kode ini berfungsi sebelum tambalan. Itu tidak berhasil setelah itu. Kesalahannya adalah:
[InvalidOperationException: Operasi ini tidak berlaku karena keadaan saat ini objek.]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded () 82 System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] byte, Encoding encoding) 111
System.Web. HttpRequest.FillInFormCollection () +307