Microsoft gần đây (12-29-2011) đã phát hành bản cập nhật để giải quyết một số lỗ hổng bảo mật nghiêm trọng trong .NET Framework. Một trong những bản sửa lỗi được MS11-100 giới thiệu tạm thời giảm nhẹ một cuộc tấn công DoS tiềm năng liên quan đến va chạm bảng băm. Nó xuất hiện sửa lỗi này phá vỡ các trang có chứa nhiều dữ liệu POST. Trong trường hợp của chúng tôi, trên các trang có danh sách hộp kiểm rất lớn. Tại sao nó lại là vấn đề?
Một số nguồn không chính thức dường như chỉ ra rằng MS11-100 đặt giới hạn 500 cho các mục sau. Tôi không thể tìm thấy một nguồn Microsoft xác nhận điều này. Tôi biết rằng View State và các tính năng khung khác ăn hết một số giới hạn này. Có bất kỳ cài đặt cấu hình nào kiểm soát giới hạn mới này không? Chúng tôi có thể chuyển sang sử dụng các hộp kiểm nhưng nó hoạt động khá tốt cho tình huống cụ thể của chúng tôi. Chúng tôi cũng muốn áp dụng bản vá vì nó bảo vệ chống lại một số điều khó chịu khác.
Nguồn không chính thức thảo luận về giới hạn 500:
Bản tin sửa lỗi vectơ tấn công DOS bằng cách cung cấp giới hạn số lượng biến có thể được gửi cho một yêu cầu POST HTTP duy nhất. Giới hạn mặc định là 500, đủ cho các ứng dụng web thông thường, nhưng vẫn đủ thấp để vô hiệu hóa cuộc tấn công như được mô tả bởi các nhà nghiên cứu bảo mật ở Đức.
EDIT: Mã nguồn với ví dụ về giới hạn (có vẻ là 1.000, không phải 500) Tạo ứng dụng MVC tiêu chuẩn và thêm mã sau vào chế độ xem chỉ mục chính:
@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>
}
Mã này đã làm việc trước khi vá. Nó không hoạt động sau. Lỗi là:
[UnlimitedOperationException: Hoạt động không hợp lệ do trạng thái hiện tại của đối tượng.]
System.Web.HttpValueCollection.Throw IfMaxHttpCollectionKeysExceeded () +82
System.Web.HttpValueCollection.FillFromEncodingBytes HttpRequest.FillInFormCollection () +307