Microsoft เมื่อเร็ว ๆ นี้ (12-29-2011) เปิดตัวการปรับปรุงเพื่อแก้ไขช่องโหว่ความปลอดภัยที่ร้ายแรงหลายประการใน. NET Framework หนึ่งในการแก้ไขที่แนะนำโดยMS11-100ช่วยลดการโจมตี DoS ที่อาจเกิดขึ้นชั่วคราวซึ่งเกี่ยวข้องกับการชนกันของตารางแฮช ดูเหมือนว่าการแก้ไขนี้แบ่งหน้าที่มีข้อมูล POST จำนวนมาก ในกรณีของเราบนหน้าเว็บที่มีรายการช่องทำเครื่องหมายที่ใหญ่มาก ทำไมถึงเป็นเช่นนี้?
แหล่งข้อมูลที่ไม่เป็นทางการดูเหมือนจะบ่งบอกว่า MS11-100 มีขีด จำกัด 500 รายการในรายการหลัง ฉันไม่พบแหล่งที่มาของ Microsoft ที่ยืนยันสิ่งนี้ ฉันรู้ว่ามุมมองสถานะและคุณสมบัติกรอบงานอื่น ๆ กินข้อ จำกัด นี้บางส่วน มีการตั้งค่าใด ๆ ที่ควบคุมขีด จำกัด ใหม่นี้หรือไม่? เราสามารถเปลี่ยนจากการใช้ช่องทำเครื่องหมาย แต่ใช้งานได้ดีสำหรับสถานการณ์เฉพาะของเรา เราต้องการใช้ชุดข้อมูลแก้ไขเนื่องจากป้องกันสิ่งที่น่ารังเกียจอื่น ๆ
แหล่งที่มาไม่เป็นทางการพูดถึงขีด จำกัด 500:
บูเลทีนแก้ไขเวกเตอร์การโจมตีของ DOS โดยการ จำกัด จำนวนตัวแปรที่สามารถส่งสำหรับการร้องขอ HTTP POST เดียว ขีด จำกัด เริ่มต้นคือ 500 ซึ่งควรเพียงพอสำหรับเว็บแอปพลิเคชันทั่วไป แต่ก็ยังต่ำพอที่จะต่อต้านการโจมตีดังที่อธิบายโดยนักวิจัยด้านความปลอดภัยในเยอรมนี
แก้ไข: ซอร์สโค้ดพร้อมตัวอย่างของขีด จำกัด (ซึ่งดูเหมือนจะเป็น 1,000 ไม่ใช่ 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 การเข้ารหัสโดยไบต์หากการเข้ารหัสสูงสุดโดยการเข้ารหัสแบบดั้งเดิม
[การเข้ารหัสแบบดั้งเดิม] HttpRequest.FillInFormCollection () +307