मैं असेंबली के रूप में "सुरक्षित" के रूप में कैसे चिह्नित करूं?
आप इस गलत तरीके से सोच रहे हैं।
कोई भी जो आपको लगता है कि आपको मारना चाहता है, आपको बोतल देता है और कहता है "इसे पीएं"। आप कहते हैं "क्या यह पीने के लिए सुरक्षित है?" लड़का कहता है "बोतल पढ़ें"। तुम करो। यह कहता है "उस पर डूबने के लिए सुरक्षित"।
क्या आप इसे पीते हैं?
चाहे तरल पीने के लिए सुरक्षित है या बोतल के लेबल के साथ क्या कुछ भी नहीं करना है! "सुरक्षित करने के लिए सुरक्षित" चिह्नित एक बोतल में गैसोलीन डालना पूरी तरह से संभव है।
आप SQL सर्वर पर संदिग्ध तरल से भरा बोतल सौंपने वाले व्यक्ति हैं, और SQL सर्वर का कहना है, "मुझे इस असेंबली पर आपके द्वारा डाले जाने वाले किसी भी लेबल पर भरोसा नहीं है"। इसके बजाय, यह विधानसभा क्या कर सकती है प्रतिबंधित करने के द्वारा असेंबली को "सुरक्षित" बनाने जा रही है। यह उस चीज़ पर अनुमतियों को बंद कर देता है ताकि SQL सर्वर का लाभ उठाने के लिए आपकी असेंबली द्वारा किए गए किसी भी प्रयास के परिणामस्वरूप अपवाद के माध्यम से इसकी समाप्ति हो जाएगी।
मुझे कैसे पता चलेगा कि मेरी असेंबली में कुछ "सुरक्षित" नहीं है?
इसे कम विश्वास में चलाने का प्रयास करें। क्या यह एक सुरक्षा अपवाद के साथ दुर्घटनाग्रस्त हो गया और मर गया? अगर उत्तर हाँ है, तो यह विश्वसनीय स्तर सुरक्षित ट्रस्ट स्तर के अनुसार सुरक्षित नहीं था। विभिन्न ट्रस्ट स्तर अनुमतियों के विभिन्न स्तर प्रदान करते हैं। आपके द्वारा अपनी मशीन पर स्थापित कोड आम तौर पर पूरी तरह से भरोसेमंद है, आपके कॉर्पोरेट नेटवर्क से चलाए जाने वाले कोड कम भरोसेमंद हैं, इंटरनेट से चलाए जाने वाले कोड को शायद ही कभी भरोसा है। SQL सर्वर में चलाए गए कोड को सभी का विश्वास कम से कम स्तर मिलता है; ऐसा लगता है कि लगभग सबकुछ असुरक्षित है।
यदि मैं असुरक्षित कोड विकल्प की अनुमति देता हूं तो क्या अनुमति है?
फिर आप कोड लिख सकते हैं जो सीधे कच्चे पॉइंटर्स को अपनी पसंद के तरीके में स्मृति में जोड़ता है। इसके लिए पूर्ण विश्वास की आवश्यकता है; यदि आप असुरक्षित कोड का उपयोग करना चाहते हैं तो कोई प्रतिबंधों को अपनी असेंबली पर रखा जाना चाहिए। असुरक्षित कोड प्रक्रिया में उपयोगकर्ता-मोड मेमोरी के हर बिट को बदल सकता है।
क्या संबंध है, यदि कोई हो, "cls शिकायत" कोड एक विधानसभा जा रहा है "सुरक्षित" के साथ क्या करना है?
कोई भी नहीं, इस तथ्य के अलावा कि सीएलएस अनुपालन कोड कच्चे सूचक प्रकार लेने वाले एपीआई की अनुमति नहीं देता है।
सीएलएस सामान्य भाषा सबसेट है - सुविधाओं का सेट जो सभी अनुपालन .NET भाषाओं में मौजूद होना आवश्यक है। इस तरह आपको खुद से पूछना नहीं है "अरे, अगर मैं इस विधि को लिखता हूं जो एक int लेता है और सी # में एक स्ट्रिंग देता है, तो क्या मैं इसे एफ # से कॉल कर सकता हूं?" यदि आप स्वयं को सीएलएस के नियमों का पालन करने के लिए प्रतिबंधित करते हैं तो आप जानते हैं कि कोई भी सीएलएस भाषा आपकी लाइब्रेरी का उपयोग कर सकती है, और आप सीएलएस-अनुपालन पुस्तकालयों का उपयोग कर सकते हैं इससे कोई फर्क नहीं पड़ता कि वे किस भाषा में लिखे गए थे। इसमें सुरक्षा के साथ कुछ भी नहीं है।
कोड असुरक्षित ब्लॉक के अंदर "असुरक्षित"
असुरक्षित ब्लॉक के अंदर कोड प्रक्रिया में मनमाने ढंग से भ्रष्ट स्मृति अगर यह बुरी तरह से लिखा जाता है कर सकते हैं। हम आपको "असुरक्षित" जैसे कोड को चिह्नित करते हैं ताकि आप जान सकें कि आपके कोड समीक्षा प्रयासों पर ध्यान केंद्रित करना है। एक असुरक्षित ब्लॉक में आप, सी # भाषा, प्रकार और मेमोरी सुरक्षा सुनिश्चित करने के लिए ज़िम्मेदार हैं।
एक सवाल आप से पूछना नहीं किया:
क्या "आंशिक रूप से भरोसा फोन करने वाले के लिए सुरक्षित" मतलब के रूप में एक विधानसभा अंकन करता है?
यह एक ऐसी स्थिति है जहां आप निशान "सुरक्षित" के रूप में एक विधानसभा करते है। AllowPartiallyTrustedCallerAttribute (APTCA) के साथ एक असेंबली को चिह्नित करके, असेंबली के लेखक, इस बात पर जोर दे रहे हैं कि अगर असेंबली में कोड को कम-ट्रस्ट शत्रुतापूर्ण कोड कहा जाता है जो उपयोगकर्ता पर हमला करने का प्रयास कर रहा है, तो आपकी असेंबली में कुछ भी नहीं है जो कम ट्रस्ट शत्रुतापूर्ण उपयोगकर्ता उपयोगकर्ता के खिलाफ उपयोग कर सकते हैं। संक्षेप में, आप कह रहे हैं "भले ही उपयोगकर्ता द्वारा पूरी तरह से भरोसा किया गया हो, मेरा कोड एक हथियार नहीं है कि उपयोगकर्ता के खिलाफ बुरा कोड उपयोग कर सकता है"।
हमने एपीटीसीए का आविष्कार किया क्योंकि दिन में, पीटर टोर और मैंने पाया कि शत्रुतापूर्ण कॉलर्स के लिए एक रास्ता था, जिसने जेस्क्रिप्ट.NET कोड को चालित करने के लिए कम विश्वास किया था - जो कि डिफ़ॉल्ट रूप से उच्च विश्वास था - ऐसे में जिस तरह से कम ट्रस्ट कोड JScript.NET कोड को उपयोगकर्ता की तरफ से हमला करने का कारण बन सकता है। (इसे आमतौर पर "लुभावना हमला" कहा जाता है क्योंकि लो-ट्रस्ट कोड हाई-ट्रस्ट कोड को इसके गंदे काम करने में "लूरेस" करता है।)
यह सुनिश्चित करने के लिए बड़े प्रयासों के केवल एक छोटे से हिस्से के रूप में गलती की तरह फिर से नहीं हुआ, सीएलआर टीम ने एपीटीसीए की शुरुआत की। एपीटीसीए को एक असेंबली पर डालकर, आप अपने उपयोगकर्ताओं को बता रहे हैं कि आप दावा कर रहे हैं कि आपके काम का उनका विश्वास शत्रुतापूर्ण तृतीय पक्ष कोड द्वारा अपमानजनक नहीं है। एपीटीसीए को एक असेंबली पर तब तक न रखें जब तक कि (1) असेंबली के लिए का इरादा रखने के लिए उपयोगकर्ता द्वारा विश्वास किया जा सकता है, और (2) आपने वास्तव में पूरी तरह से सुरक्षा समीक्षा की है।
नया पारदर्शिता आधारित सुरक्षा मॉडल एपीटीसीए की सौभाग्य से बहुत अधिक जरूरतों को रोकता है।
यदि एपीटीसीए किसी असेंबली पर मौजूद नहीं है तो एक "लिंक मांग" यह सुनिश्चित करेगी कि आपके असेंबली को आमंत्रित करने वाला कोड पूरी तरह भरोसेमंद है।ध्यान दें कि यह लिंक मांग है, पूर्ण मांग नहीं है।
इस मामले में 'सुरक्षित' असेंबली सीएएस स्तर के संबंध में है। एमएसडीएन पर एक बहुत अच्छा लेख है जो [SQL सर्वर के लिए असेंबली डिजाइनिंग] (http://msdn.microsoft.com/en-us/library/ms189566.aspx) के बारे में बात करता है और आपकी असेंबली की 'सुरक्षित' पर विस्तार करता है । –