2008-12-09 11 views
5

क्या कोई सुरक्षा एक्शन के मूल्यों के अर्थ और उद्देश्यों को समझा सकता है?अनुमतियों के लिए .NET के "सुरक्षा एक्शन" पैरामीटर को समझना

एमएसडीएन पृष्ठ बहुत स्पष्ट नहीं है। यह कहता है कि LinkDemand केवल समय-समय पर संकलन पर होता है जबकि मांग रनटाइम पर होती है।

क्यों डिमांड के संबंध में भेद और किस स्थितियों में मैं लिंकडेमैंड का उपयोग करूंगा?

इसी प्रकार, अन्य दिलचस्प मूल्यों जैसे इनहेरिटेंस डेमांड, एस्र्ट और परमिट केवल उपयोग के मामले क्या हैं।

उत्तर

18

लिंकडेमांड को मूल रूप से निर्दिष्ट अनुमति रखने के लिए कॉलिंग कोड की आवश्यकता होती है। मांग, दूसरी तरफ, केवल कॉलिंग कोड को निर्दिष्ट अनुमति नहीं है, बल्कि वह कोड जिसे कॉलिंग कोड कहा जाता है, और वह कोड जिसे कॉल किया जाता है, और इसी तरह, सभी तरह से स्टैक (या जब तक सम्मिलन मिला है; नीचे देखें)।

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

आर्ट मूल रूप से मांग के लिए शॉर्ट-सर्किट है। डिमांड के साथ होने वाली सुरक्षा जांच तब रुक जाती है जब स्टैक पर एक कॉलर सक्रिय एक्टर्ट होता है (दूसरे शब्दों में, केवल आवेदक के ढेर में कॉलर्स को अनुमति होनी चाहिए)। तो, लिंकडेमांड की तरह, आपको भरोसा करना होगा कि आवेदक के साथ कोड का उपयोग अपने कॉलर्स द्वारा नहीं किया जा सकता है।

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

परमिट केवल एक विशिष्ट अनुमति को अस्वीकार करने के बजाय अस्वीकार की तरह है, यह निर्दिष्ट एक निर्दिष्ट के अलावा हर अनुमति को अस्वीकार करता है।

विरासत डेमैंड, दूसरों के विपरीत, सीधे विधि कॉल से संबंधित नहीं है, लेकिन कहता है कि जिस वर्ग में अनुमति नहीं है, वह विरासत डेमांड के साथ कक्षा से उत्तराधिकारी नहीं हो सकती है। उदाहरण के लिए, अविश्वसनीय कोड को कक्षा के संरक्षित सदस्यों तक पहुंच प्राप्त करने से रोकने के लिए इस्तेमाल किया जा सकता है जो अन्यथा वंश वर्गों तक पहुंच योग्य होगा।

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