2009-05-15 15 views
5

एक असेंबली पर हस्ताक्षर करने के लिए आपको यह सुनिश्चित करना होगा कि ए द्वारा उपयोग की जाने वाली सभी असेंबली बी, सी, डी पर हस्ताक्षर किए गए हैं, और फिर बी, सी, डी, आदि द्वारा उपयोग की जाने वाली सभी असेंबली। मुझे समझ में नहीं आता कि इसका सुरक्षा लाभ क्या है। मुझे लगता है कि यह छेड़छाड़ को रोकने के लिए माना जाता है, लेकिन असेंबली ए को किसी भी फाइल को खोलने की अनुमति है, और इन्हें छेड़छाड़ की जा सकती है। एक बाहरी वेबसर्वर के लिए भी यही है।दृढ़ता से नामित असेंबली क्यों असेंबली का उपयोग नहीं कर सकते हैं जो हस्ताक्षरित नहीं हैं?

इसके अलावा, यह एक .snk फ़ाइल को सार्वजनिक करना साथ एक विधानसभा हस्ताक्षर करने के लिए, आवश्यकता sidestepping भी आसान है।

+3

"यह एक .snk फ़ाइल के साथ एक विधानसभा हस्ताक्षर करने के लिए बहुत आसान है कि आप सार्वजनिक बनाएं ": तो अपनी स्नैक फ़ाइल को सार्वजनिक न करें ... –

+0

मेरा मतलब था कि पारगमन की आवश्यकता के समाधान के रूप में। मेरा मुद्दा यह है कि यह काफी आसान नहीं है; पारगमन की आवश्यकता नहीं है और एक ही चीज़ की राशि आसान होगी। –

+1

एरिक लिपर्ट ने हाल ही में इस बारे में ब्लॉग किया: http://blogs.msdn.com/ericlippert/archive/2009/06/04/alas-smith-and-jones.aspx –

उत्तर

2

मजबूत नामकरण का एक अन्य कारण संस्करण है। यदि आप एक मजबूत नामित असेंबली का संदर्भ देते हैं, तो आपको वह विशिष्ट संस्करण मिलता है - और यह इसके निर्भरताओं को उस विशिष्ट संस्करणों पर लोड करेगा जो यह निर्भर करता है।

संपादित

उदाहरण परिदृश्य: आप GAC में एक विधानसभा डालें, तो वह पक्ष-बाई-साइड संस्करण अनुमति देने के लिए नामित मजबूत हो गया है। आप इसे जीएसी में नहीं डाल सका, हालांकि, जब तक इसकी निर्भरता भी नहीं थी (अन्यथा, वे रन टाइम पर लोड करने में विफल रहे)। उन असेंबली को भरोसेमंद रूप से लोड करने के लिए, उन्हें भी मजबूत नाम और जीएसी में होना चाहिए।

+0

हां। मैं सहमत हूं कि मजबूत नामकरण के लाभ हैं। जो मैं नहीं देखता वह पारगमन की आवश्यकता का लाभ है। –

1

यह क्योंकि एक मज़बूत नाम विधानसभा का तात्पर्य है कि यह भरोसा किया जा सकता है, और दी गई सुरक्षा के स्तर को विचार है कि कोड किसी वैध स्रोत से है के आधार पर कर रहे हैं। इसका अर्थ यह है कि जिन अन्य वस्तुओं के साथ यह बातचीत करता है उन्हें भी भरोसा किया जाना चाहिए, क्योंकि यह एक ही सुरक्षा संदर्भ के तहत निष्पादित होता है।

मज़बूत नाम वस्तुओं इस तरह से काम नहीं किया है, तो हमले के एक तरीके के आइटम जो दुष्ट कोड हमलावर निष्पादित करने के लिए चाहता है के साथ प्रवेश नहीं किया है को बदलने के लिए किया जाएगा। दुष्ट कोड हस्ताक्षरित आइटम के विश्वसनीय सुरक्षा संदर्भ के तहत निष्पादित होगा।

+0

आप सामान्य फाइल असेंबली ओवरराइट कर सकते हैं ए पर निर्भर करता है, या नकली वेबसर्वर इसे कनेक्ट करता है। शायद ए इन स्रोतों से रनटाइम कोड बनाता है, और सुरक्षा जोखिम वही है। यह किसी के हस्ताक्षरित असेंबली का उपयोग करने के लिए कॉल है और हमला करने के लिए खुद को खोलें। ध्यान दें कि ए पहले से ही ऐसा कर सकता है: बस एक कुंजी के साथ बी पर हस्ताक्षर करें और इसे सार्वजनिक बनाएं। यह सिर्फ असुविधाजनक है। –

8

मुद्दा यह है कि अन्यथा आप विधानसभा बी/सी/डी को एक अलग (हैक) के साथ प्रतिस्थापित कर सकते हैं, और ए कभी नहीं देखेगा; यह उन्हें लोड करेगा और कोड निष्पादित करेगा। मजबूत नामकरण के साथ, आप बिना या तो फिर से हस्ताक्षर करने को हैक कर लिया बी/सी/एक ही कुंजी के साथ डी ऐसा नहीं कर सकते, या ए हैकिंग से

+0

यदि वे हस्ताक्षर किए गए थे तो आप बी/सी/डी को प्रतिस्थापित नहीं कर पाएंगे, केवल तभी जब वे नहीं थे। यह ए कॉल है। –

+0

@ ब्रूनो - यह मेरा बिंदु है ... –

+0

लेकिन ऐसा नहीं है कि यह अब कैसे काम करता है। कोई तय नहीं कर सकता कि हस्ताक्षरित या हस्ताक्षरित बी/सी/डी पर निर्भर होना है या नहीं। उन्हें हस्ताक्षर किया जाना चाहिए क्योंकि ए है। –

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

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