कोड एक्सेस सिक्योरिटी
कोड एक्सेस सिक्योरिटी (सीएएस), माइक्रोसॉफ्ट .नेट फ्रेमवर्क में, अविश्वसनीय कोड को विशेषाधिकार प्राप्त कार्यों को करने से रोकने के लिए माइक्रोसॉफ्ट का समाधान है। जब सामान्य भाषा रनटाइम एक असेंबली (सीएलआई) को लोड करता है तो यह असेंबली के लिए प्रमाण प्राप्त करेगा और असेंबली से संबंधित कोड समूह की पहचान करने के लिए इसका उपयोग करेगा।। कोड समूह में एक अनुमति सेट (एक या अधिक फ़ाइल सिस्टम अनुमतियाँ) होती है। कोड जो एक विशेषाधिकार प्राप्त कार्रवाई करता है, एक कोड एक्सेस मांग करेगा जो सीएलआर को कॉल स्टैक पर चलने और कॉल स्टैक में प्रत्येक विधि (कंप्यूटर विज्ञान) की असेंबली को दी गई अनुमति सेट की जांच करने का कारण बनता है।
कोड समूह और अनुमति सेट मशीन के व्यवस्थापक द्वारा निर्धारित किए जाते हैं जो सुरक्षा नीति को परिभाषित करता है।
माइक्रोसॉफ्ट सीएएस को अप्रचलित मानता है और इसके उपयोग को हतोत्साहित करता है।[1] यह .नेट कोर और .नेट में भी उपलब्ध नहीं है।
प्रमाण
प्रमाण किसी विधानसभा से जुड़ी कोई भी जानकारी हो सकती है। .नेट कोड एक्सेस सुरक्षा द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट प्रमाण हैं:
- एप्लीकेशन डायरेक्टरी: वह डायरेक्टरी जिसमें असेंबली रहती है।
- प्रकाशक: असेंबली के प्रकाशक के डिजिटल हस्ताक्षर (एथेंटिकोड के माध्यम से असेंबली पर हस्ताक्षर करने की आवश्यकता होती है)।
- यूनिफ़ॉर्म रिसोर्स लोकेटर: पूरा यूआरएल जहां से असेंबली लॉन्च की गई थी
- साइट: यूआरएल/रिमोट डोमेन/वीपीएन का होस्टनाम।
- क्षेत्र: वह सुरक्षा क्षेत्र जहां विधानसभा निवास करती है
- क्रिप्टोग्राफ़िक हैश फ़ंक्शन: असेंबली का एक क्रिप्टोग्राफ़िक हैश, जो एक विशिष्ट संस्करण की पहचान करता है।
- शक्तिशाली नाम: असेंबली पर हस्ताक्षर करने के लिए उपयोग की जाने वाली हस्ताक्षर कुंजी की असेंबली नाम, संस्करण और सार्वजनिक कुंजी का संयोजन। साइनिंग कुंजी एक X.509 प्रमाणपत्र नहीं है, किन्तु शक्तिशाली नामकरण उपकरण, एसएन.ईएक्सई या विजुअल स्टूडियो द्वारा उत्पन्न एक कस्टम कुंजी जोड़ी है।
एक डेवलपर कस्टम प्रमाण (तथाकथित असेंबली प्रमाण) का उपयोग कर सकता है, किन्तु इसके लिए सुरक्षा असेंबली लिखने की आवश्यकता होती है और .नेट के संस्करण 1.1 में यह सुविधा काम नहीं करती है।
असेंबली के हैश पर आधारित प्रमाण कोड में आसानी से प्राप्त होता है। उदाहरण के लिए, C# में, निम्नलिखित कोड क्लॉज द्वारा प्रमाण प्राप्त किया जा सकता है:
this.GetType().Assembly.Evidence
नीति
एक नीति अभिव्यक्तियों का एक समूह है जो एक कोड समूह सदस्यता निर्धारित करने के लिए प्रमाण का उपयोग करती है। एक कोड समूह उस समूह के भीतर असेंबली के लिए अनुमति सेट देता है। .नेट में चार नीतियां हैं:
- उद्यम: मशीनों के एक परिवार के लिए नीति जो एक सक्रिय निर्देशिका स्थापना का हिस्सा हैं।
- मशीन: वर्तमान मशीन के लिए नीति।
- उपयोगकर्ता: लॉग ऑन उपयोगकर्ता के लिए नीति।
- AppDomain: क्रियान्वित अनुप्रयोग डोमेन के लिए नीति।
पहली तीन नीतियों को एक्सएमएल फाइलों में संग्रहीत किया जाता है और .नेट कॉन्फ़िगरेशन टूल 1.1 (mscorcfg.msc) के माध्यम से प्रशासित किया जाता है। वर्तमान एप्लिकेशन डोमेन के लिए अंतिम नीति को कोड के माध्यम से प्रशासित किया जाता है।
कोड एक्सेस सुरक्षा प्रत्येक नीति के लिए एक असेंबली का प्रमाण प्रस्तुत करेगी और फिर असेंबली को दी गई अनुमतियों के रूप में चौराहे (जो सभी उत्पन्न अनुमति सेटों के लिए सामान्य अनुमतियां हैं) लेगी।
डिफ़ॉल्ट रूप से, एंटरप्राइज़, उपयोगकर्ता और ऐपडोमेन नीतियां पूर्ण विश्वास देती हैं (यानी वे सभी असेंबली को सभी अनुमतियां रखने की अनुमति देती हैं) और मशीन नीति अधिक प्रतिबंधित है। चूंकि चौराहा लिया जाता है, इसका मतलब है कि अंतिम अनुमति सेट मशीन नीति द्वारा निर्धारित की जाती है।
ध्यान दें कि नीति प्रणाली को .नेट Framework 4.0 में समाप्त कर दिया गया है।[2]
कोड समूह
कोड समूह प्रमाण के एक टुकड़े को नामित अनुमति सेट के साथ जोड़ते हैं। व्यवस्थापक एक विशेष प्रकार के प्रमाण (उदाहरण के लिए, साइट) और उस प्रमाण के लिए एक विशेष मूल्य (उदाहरण के लिए, www.mysite.com) निर्दिष्ट करने के लिए .नेट कॉन्फ़िगरेशन टूल का उपयोग करता है और फिर अनुमति सेट की पहचान करता है कि कोड समूह होगा दिया गया।
मांगें
कोड जो कुछ विशेषाधिकार प्राप्त कार्रवाई करता है, एक या अधिक अनुमतियों की मांग करेगा। मांग सीएलआर को कॉल स्टैक चलने देती है और प्रत्येक विधि के लिए सीएलआर यह सुनिश्चित करेगी कि मांग की गई अनुमतियां विधि की असेंबली की दी गई अनुमतियों में हैं। अगर अनुमति नहीं दी जाती है तो सुरक्षा अपवाद (कंप्यूटर विज्ञान) फेंक दिया जाता है। यह डाउनलोड किए गए कोड को विशेषाधिकार प्राप्त क्रियाएं करने से रोकता है। उदाहरण के लिए, यदि किसी अविश्वसनीय साइट से असेंबली डाउनलोड की जाती है तो असेंबली में कोई फ़ाइल IO अनुमति नहीं होगी और इसलिए यदि यह असेंबली किसी फ़ाइल तक पहुँचने का प्रयास करती है, तो कॉल को रोकने के लिए एक अपवाद फेंक देगी।