2009-05-07 11 views
27

यदि कोई डब्ल्यूसीएफ सेवा अपने प्रतिक्रिया संदेश में बाइट सरणी लौटाती है, तो एक मौका है कि डेटा 16384 बाइट्स की डिफ़ॉल्ट लंबाई से अधिक हो जाएगा। जब ऐसा होता है, अपवादडब्ल्यूसीएफ रीडरक्वाटस सेटिंग्स - कमियां?

की तरह कुछ एक्सएमएल डेटा को पढ़ने के दौरान अधिकतम सरणी लंबाई कोटा (16384) पार हो गई है हो जाएगा। XML को रीडर बनाने के दौरान उपयोग किए गए ऑब्जेक्ट XmlDictionaryReaderQuotas ऑब्जेक्ट पर MaxArrayLength गुण को बदलकर को बढ़ाया जा सकता है।

सभी सलाह मैं वेब पर देखा है सिर्फ अपने अधिकतम करने के लिए <readerQuotas> तत्व में सेटिंग्स को बढ़ाने के लिए है, तो सर्वर पर की तरह

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
       maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
       maxNameTableCharCount="2147483647" /> 

कुछ, और ग्राहक पर समान है।

मैं इस दृष्टिकोण के साथ किसी भी कमी के बारे में जानना चाहता हूं, खासकर यदि बाइट सरणी का आकार केवल मौलिक रूप से बहुत बड़ा हो सकता है। ऊपर दी गई सेटिंग्स को डब्ल्यूसीएफ को प्रत्येक अनुरोध के लिए एक विशाल सरणी घोषित करें? क्या आपको लौटाए गए डेटा के अधिकतम आकार को सीमित करना है, या आप केवल एक उचित आकार के बफर निर्दिष्ट कर सकते हैं और डब्ल्यूसीएफ को तब तक जारी रखने के लिए प्राप्त कर सकते हैं जब तक कि सभी डेटा पढ़े न जाए?

धन्यवाद!

उत्तर

33

मुख्य दोष हमलों के लिए संभावित भेद्यता है - उदा। एक दुर्भावनापूर्ण स्रोत अब आपके वेबसर्वर को 2 जीबी आकार तक संदेश के साथ बाढ़ कर सकता है और संभावित रूप से इसे नीचे ला सकता है।

बेशक, 2 जीबी संदेश भी स्मृति खपत के मामले में आपके सर्वर पर कुछ तनाव डालते हैं, क्योंकि उन संदेशों को स्मृति में पूरी तरह से इकट्ठा करने की आवश्यकता होती है (जब तक आप डब्ल्यूसीएफ में स्ट्रीमिंग प्रोटोकॉल का उपयोग नहीं करते)। यदि आपके पास 2 ग्राहक आपको 2 जीबी संदेश भेज रहे हैं, तो आपको अपने सर्वर पर बहुत सी रैम की आवश्यकता होगी! :-)

इसके अलावा, मुझे कोई वास्तविक समस्या नहीं दिखाई देती है।

मार्क

+0

ठीक है, तो सर्वर config में सेटिंग्स सिर्फ अनुरोध संदेश, और ग्राहक config में सेटिंग्स प्रतिक्रिया संदेशों को प्रभावित प्रभावित करते हैं? अगर मेरे पास एक सेवा है जो एक छोटा अनुरोध संदेश लेता है लेकिन एक बड़ी प्रतिक्रिया वापस कर सकता है, तो क्या मुझे सर्वर कॉन्फ़िगरेशन में कोई बदलाव करना है, या इसे ग्राहकों को छोड़ देना है? क्या सर्वर कॉन्फ़िगरेशन को बदलने का कोई तरीका है ताकि जब कोई क्लाइंट सेवा संदर्भ बनाता है तो यह स्वचालित रूप से बड़े प्रतिक्रियाओं के लिए सेट हो जाएगा? धन्यवाद! –

+0

वह "बड़ी प्रतिक्रिया" कैसे संरचित है? क्या यह मूल रूप से एक फ़ाइल है जिसे आप वापस कर रहे हैं? यदि ऐसा है, तो मैं स्ट्रीम-आधारित प्रतिक्रिया के लिए स्ट्रीमिंग की जांच करूंगा। जहां तक ​​मैं इसे समझता हूं, सर्वर सेटिंग इनकमिंग अनुरोधों के साथ-साथ आउटगोइंग प्रतिक्रियाओं को भी प्रभावित करेगी, इसलिए यदि आप संदेश का आकार बहुत छोटा सेट करते हैं, तो बड़ी प्रतिक्रिया संभव नहीं होगी (आप मूल रूप से बफर का आकार बदल रहे हैं सर्वर पर अनुरोध और प्रतिक्रियाओं के लिए उपयोग किया जाता है)। –

8

जो विभिन्न सुरक्षा विचारों आप जब इन मूल्यों को स्थापित करने के बारे में सोचने की जरूरत बताते हैं MSDN पर एक लेख है। कुछ इनकार करने वाले सेवा हमले वे हैं जो आपकी याददाश्त खाते हैं और उनमें से कुछ (जैसे कि मैक्सडेप ठीक से सेट नहीं किया जा रहा है) घातक स्टैक ओवरफ्लो एक्सेप्शन का कारण बन सकता है जो आपके सर्वर को एक ही अनुरोध में ला सकता है।

http://msdn.microsoft.com/en-us/library/ms733135.aspx

संबंधित मुद्दे