2012-08-09 20 views
19

मेरे पास एक काफी स्थिर सर्वर एप्लिकेशन संस्करण है जो लगभग एक वर्ष के लिए दर्जनों ग्राहकों पर तैनात किया गया है।सुरक्षा महत्वपूर्ण विधि तक पहुंचने के लिए सुरक्षा पारदर्शी विधि एक्स द्वारा प्रयास वाई विफल

एक नए ग्राहक हाल ही में सेटअप आवेदन और निम्न त्रुटि हो रही है:

System.MethodAccessException: Attempt by security transparent method [SomeMethod] to access security critical method [SomeOtherMethod] failed.

दोनों SomeMethod और SomeOtherMethod विधानसभाओं कि मैंने लिखा में तरीकों, जो .NET 4 के खिलाफ बनाया जाता है, और कहा कि अंदर चल रहे हैं एक विंडोज सेवा। यदि इससे कोई फर्क पड़ता है, तो SomeOtherMethod .NET 2.0 के विरुद्ध बनाए गए किसी तृतीय पक्ष असेंबली (EntLib 4.1) से किसी प्रकार का संदर्भ देता है। EntLib 4.1 के लिए कोड को देखते हुए, मुझे लगता है कि वे सुरक्षा ट्रांस्पेरेंट और एपीटीसी दोनों विशेषताओं का उपयोग करते हैं, लेकिन इसने कभी अन्य ग्राहकों पर समस्याएं नहीं पैदा की हैं।

इन असेंबली को .NET 2.0 सीएलआर से अपग्रेड किया गया था, लेकिन बहुत समय पहले। यह सटीक कोड अन्य ग्राहकों पर ठीक है, और मैं स्पष्ट रूप से एपीटीसी विशेषता का उपयोग नहीं कर रहा हूं और न ही मैं कहीं भी सुरक्षा क्रिटिकल विशेषता का उपयोग कर रहा हूं।

इससे मुझे निष्कर्ष निकाला जाता है कि यह एक कॉन्फ़िगरेशन समस्या है या शायद .NET Framework पैच समस्या है। क्या .NET के लिए एक पैच जारी किया गया है जो इस ब्रेकिंग चेंज का कारण बनता है? क्या कोई कॉन्फ़िगरेशन सेटिंग है जहां यह इस प्रकार की चेक को लागू करता है जो डिफ़ॉल्ट रूप से बंद है लेकिन मेरा ग्राहक सक्षम हो सकता है?

एक अंतिम बिंदु। मेरी सेवा पीडीएफ उत्पन्न करने के लिए एसएसआरएस आरडीएलसी का उपयोग करती है। नेट 4 में कुछ बदलाव के कारण, मैं निम्नलिखित config के माध्यम से विरासत सुरक्षा नीति का उपयोग करने के लिए मजबूर सेवा करना होगा:

<runtime> 
    <NetFx40_LegacySecurityPolicy enabled="true" /> 
    </runtime> 

अधिक जानकारी के लिए कारण है कि मैं ऐसा करने की जरूरत पर, इस stackoverflow पोस्ट देखें: Very High Memory Usage in .NET 4.0

महत्वपूर्ण बात यह है कि मैं इसे अपने सभी अन्य ग्राहकों पर भी करता हूं। केवल इस ग्राहक को समस्याएं हैं।

उत्तर

20

सॉफ़्ट, एंटरप्राइज़ लाइब्रेरीज़ के लिए ज़िम्मेदार Microsoft पैटर्न और प्रैक्टिस टीम द्वारा नियोजित पैटर्न और प्रथाएं बहुत ही दुखी हैं। खैर, अपवाद सटीक है, आप एक विधि को कॉल नहीं कर सकते हैं जिसे "मैं निश्चित रूप से सुरक्षा की जांच करूंगा" कोड से सजाया गया है, "मेह, मैं सुरक्षा की जांच नहीं करूंगा इसलिए इसे जांचने के लिए सीपीयू चक्रों को जलाने से परेशान न करें" । जावा में उपयोग किए जाने वाले अपवाद विनिर्देशों के साथ-साथ कौन से तराजू। सीएएस अविश्वसनीय रूप से उपयोगी है, लेकिन अपवादों का निदान एक प्रमुख सिरदर्द है और अक्सर उस कोड को शामिल करता है जिसका आपके पास स्वामित्व नहीं है और ठीक नहीं हो सकता है। .NET 4.

संपादकीय पूर्ण होने के कारण इसका कारण बन गया। समस्या पर एक पॉट-शॉट लेते हुए, आपको यह पता लगाना होगा कि क्यों सीएएस लागू किया जा रहा है। इसके लिए सबसे सरल स्पष्टीकरण यह है कि सेवा पूर्ण विश्वास में नहीं चलती है। के लिए सबसे सरल स्पष्टीकरण कि यह है कि क्लाइंट ने स्थानीय हार्ड ड्राइव पर सेवा स्थापित नहीं की है। या आमतौर पर स्थानीय असेंबली पर भी डॉन-ट्रस्ट-इट मोड में कोड चला रहा है, एक बहुत ही पागल व्यवस्थापक इसे पसंद कर सकता है। इसे Caspol.exe के साथ कॉन्फ़िगर करने की आवश्यकता है, एक उपकरण जिसका कमांड लाइन विकल्प सीएएस के रूप में रहस्यमय हैं। गैर-भरोसेमंद स्थान स्पष्टीकरण पर पॉट-शूटिंग, आपके क्लाइंट को कैस्पोल चलाने की आवश्यकता है जैसा कि इस blog post में दिखाया गया है। या बस स्थानीय रूप से सेवा को केवल तैनात करें ताकि डिफ़ॉल्ट "मैं आपको भरोसा करता हूं" लागू होता है।

ओपी द्वारा खोजे गए वास्तविक कारण में संपादन: alternate data stream से सावधान रहें जो किसी अविश्वसनीय इंटरनेट या नेटवर्क स्थान से डाउनलोड होने पर फ़ाइल में जोड़ा जाता है। फ़ाइल को "जोन। इंडेंटिफायर" नामक एक स्ट्रीम मिलेगी जो ट्रैक करता है कि यह "जोनआईडी" मान से कहां से आया था। यह वह मान है जो भंडारण स्थान से प्राप्त ट्रस्ट को ओवरराइड करता है।आमतौर पर इसे इंटरनेट क्षेत्र में डाल दिया जाता है। एक्सप्लोरर का उपयोग करें, फ़ाइल पर राइट-क्लिक करें और उस स्ट्रीम को हटाने के लिए "अनब्लॉक करें" पर क्लिक करें। बाद क्या वाकई आप फ़ाइल :)

+1

यह समझ में आता है। मैं आज इस पर जांच कर रहा हूं। मेरे एफआईआरएस विचार वास्तव में थे कि विंडोज़ में फीचर के कारण एक असेंबली अवरुद्ध हो रही थी जो ई-मेल या आईई के माध्यम से डाउनलोड की गई फाइलों को असुरक्षित के रूप में ध्वजांकित करती है। मैंने पहले यह मुझे काट दिया है। – RMD

+3

आपका उत्तर बहुत उपयोगी था। यह वास्तव में चीजों को गम करने के लिए अवरुद्ध असेंबली बन गया। फ़ाइल अवरुद्ध करने (गुण -> अनब्लॉक) को हटाने से समस्या हल हो गई। – RMD

+2

@ आरएमडी धन्यवाद! अरे तुम विंडोज़ – JefClaes

9

भरोसा कर सकते हैं मामले में कर रहे हैं यह दूसरों में मदद करता है मैं इस समस्या के लिए मेरे समाधान पोस्ट: AssemblyInfo.cs पर

1), हटाया/टिप्पणी की थी [विधानसभा: SecurityTransparent] लाइन।

2) वर्ग और विधि एक नेटवर्क कनेक्शन स्थापित करने में करता है कि वास्तविक नौकरी [SecuritySafeCritical] के रूप में चिह्नित किया गया था मेरे मामले में,:

[SecuritySafeCritical] 
public class NetworkConnection : IDisposable 
{ 
    [SecuritySafeCritical] 
    public NetworkConnection(string networkName, NetworkCredential credentials) 
    { 
     ............. 
    } 
} 

3) के रूप में [SecurityCritical] कोलर क्लास और विधि बाजार था:

[SecurityCritical] 
public class DBF_DAO : AbstractDAO 
{ 
    [SecurityCritical] 
    public bool DBF_EsAccesoExclusivo(string pTabla, ref ArrayList exepciones) 
    { 
     .... 
     using (new NetworkConnection(DBF_PATH, readCredentials)) 
     { 
      .... 
     } 
    } 
} 
+0

धन्यवाद झोलमैन। मैं एक ही समस्या से मुलाकात की। यह मुझे – TrieuH

0

मेरे मामले में यह एक मुद्दा है जब मैं समाधान कुछ पैकेज को ओवरराइड करता है System.Web.Mvc विधानसभा संस्करण मुख्य वेब साइट परियोजना में बाध्यकारी में एक NuGet पैकेज में कामयाब रहे थे। 4.0.0.0 पर वापस सेट करें (मैंने 5.0 स्थापित किया था)। मैंने बदलाव को बदल नहीं दिया क्योंकि एमवीसी v4.0 स्थापित किया गया था और जीएसी के माध्यम से सुलभ था।

8

को सेट करें, http://www.idesign.net/ से डाउनलोड की गई WCF नमूना चलाते समय मुझे इसी तरह की समस्या का सामना करना पड़ रहा था, जबकि उनकी ServiceModelEx लाइब्रेरी का उपयोग किया गया था। मैं ServiceModelEx परियोजना

//[assembly: AllowPartiallyTrustedCallers] 

में AssemblyInfo.cs में नीचे लाइन बाहर टिप्पणी की है और यह मेरे लिए काम किया।

+0

हल करने में मदद करता है मैं क्लिकऑन के माध्यम से तैनात WinForms ऐप के अंदर एक लाइब्रेरी का उपभोग कर रहा था। क्लिकऑन एक जानवर है जो सीएएस के साथ ऊपर वर्णित @ हंस-पासैट है। सौभाग्य से मेरे पास लाइब्रेरी के लिए स्रोत कोड था, इसलिए मेरे लिए यह तय की गई रेखा से टिप्पणी कर रहा था। – bizl

+0

बढ़िया, यह मेरे लिए काम किया !! –

+0

धन्यवाद - बहुत सारे खोज के बाद यह मेरे लिए काम किया। ऐसा लगता है कि आपके कुछ असेंबली के पास उनके असेंबली इनफॉर्म्स/.vb फ़ाइल के भीतर यह निर्देश है और कुछ ऐसा नहीं है जहां नेट। उलझन में आता है - इसके सभी उदाहरणों को हटाने से समस्या हल हो जाती है – CResults

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