Microsoft ने हाल ही में (12-29-2011) .NET .NET फ्रेमवर्क में कई गंभीर सुरक्षा कमजोरियों को दूर करने के लिए एक अपडेट जारी किया। MS11-100 द्वारा शुरू किए गए सुधारों में से एक हैश टेबल टकराव से जुड़े संभावित DoS हमले को अस्थायी रूप से कम कर देता है। ऐसा लगता है कि यह फिक्स पेज टूट गया है जिसमें बहुत सारे POST डेटा हैं। हमारे मामले में, उन पृष्ठों पर, जिनमें बहुत बड़ी चेकबॉक्स सूचियाँ हैं। ऐसा क्यों होगा?
कुछ गैर-आधिकारिक स्रोतों से प्रतीत होता है कि MS11-100 पोस्टबैक आइटम पर 500 की सीमा रखता है। मुझे ऐसा Microsoft स्रोत नहीं मिल रहा है जो इसकी पुष्टि करता हो। मुझे पता है कि व्यू स्टेट और अन्य फ्रेमवर्क सुविधाएँ इस सीमा तक कुछ खा जाती हैं। क्या कोई कॉन्फ़िगरेशन सेटिंग है जो इस नई सीमा को नियंत्रित करती है? हम चेकबॉक्स का उपयोग करने से दूर जा सकते हैं, लेकिन यह हमारी विशेष स्थिति के लिए अच्छी तरह से काम करता है। हम पैच को लागू करना भी पसंद करेंगे क्योंकि यह कुछ अन्य खराब चीजों से बचाता है।
500 सीमा पर चर्चा करने वाले अनौपचारिक स्रोत:
बुलेटिन एक HTTP POST अनुरोध के लिए प्रस्तुत किए जा सकने वाले चरों की संख्या को एक सीमा प्रदान करके DOS अटैक वेक्टर को ठीक करता है। डिफ़ॉल्ट सीमा 500 है जो सामान्य वेब अनुप्रयोगों के लिए पर्याप्त होनी चाहिए, लेकिन जर्मनी में सुरक्षा शोधकर्ताओं द्वारा वर्णित हमले को बेअसर करने के लिए अभी भी काफी कम है।
EDIT: सीमा के उदाहरण के साथ स्रोत कोड (जो 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.ThrowIfMaxHttpCollectionKeysExceeded () +82 System.Web.HttpValueCollection.FillFromEncodedBytes (बाइट [] बाइट्स, एन्कोडिंग एन्कोडिंग) 111
System.Web। HttpRequest.FillInFormCollection () +307