2009-07-18 13 views
6

मैं वीएसटीएस 2008 + नेट 2.0 + सी # का उपयोग कर रहा हूं। और मैं निर्माण के बाद कोड विश्लेषण चला रहा हूँ। मुझे निम्नलिखित भ्रमित सुरक्षा चेतावनी मिली है। यहां चेतावनी और संबंधित कोड है, कोई विचार गलत है? अगर सुरक्षा चेतावनी है, तो इसे कैसे ठीक करें?इस सुरक्षा चेतावनी का मतलब क्या है (नेट प्रोसेस क्लास)?

System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); 
myProcess.StartInfo.FileName = "IExplore.exe"; 
myProcess.StartInfo.Arguments = @"default.html"; 
myProcess.StartInfo.Verb = "runas"; 
myProcess.Start(); 

चेतावनी: CA2122: Microsoft.Security: 'TestHtml()' जो एक LinkDemand है 'Process.Start()' में कहता है। यह कॉल करके, 'Process.Start()' अप्रत्यक्ष रूप से उपयोगकर्ता कोड से अवगत कराया गया है। निम्न कॉल स्टैक की समीक्षा करें जो सुरक्षा सुरक्षा को रोकने के लिए एक तरीका का पर्दाफाश कर सकती है:

उत्तर

11

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

आप अपने विधि में शामिल करके इसे ठीक कर सकते हैं

[PermissionSetAttribute(SecurityAction.LinkDemand, Name="FullTrust")] 

देखें http://msdn.microsoft.com/en-us/library/970x52db.aspx

+0

धन्यवाद, लेकिन अपने कोड त्रुटि का निर्माण किया है। त्रुटि वर्तमान संदर्भ में 'True' नाम मौजूद नहीं है। कोई विचार? मैं .NET 2.0 का उपयोग कर रहा हूं और .NET 2.0 इसका समर्थन नहीं करता है? – George2

+0

हाय blowdart, मेरे पास कुछ नए विचार हैं और मुझे लगता है कि यह एक सुरक्षा छेद नहीं है। मान लें कि विधि Foo TestHtml और TestHtml कॉल प्रक्रिया को कॉल करता है। प्रारंभ करें। यहां तक ​​कि यदि TestDemand के साथ TestHtml सक्षम नहीं है, तो Sice Process.Start LinkDemand के साथ सक्षम है, यह हमेशा TestHtml की अनुमति की जांच करेगा (TestHtml तत्काल कॉलर है)। तो अगर फू के पास पर्याप्त अनुमति नहीं है, तो TestHtml से Process.Start पर कॉल विफल हो जाएगी। तो, मुझे कोई सुरक्षा समस्या नहीं है। कोई टिप्पणी? – George2

+1

@ जॉर्ज, अभी अनुमान लगा रहा है, लेकिन जितनी जल्दी हो सके सुरक्षा आवश्यकताओं की जांच करना बेहतर होगा, अगर टेस्टएचटीएमएल विफल होने से पहले किसी भी आवेदन स्थिति को बदल देगा। – sisve

1

अधिक जानकारी के बारे में security warnings और CA2122 - Do not indirectly expose methods with link demands

+0

धन्यवाद Kb, आपके द्वारा अनुशंसित दस्तावेज़ बहुत उपयोगी हैं। मैं पुष्टि करना चाहता हूं कि मेरी समझ सही है या नहीं। मुझे लगता है कि मूल कारण प्रक्रिया है। स्टार्ट को लिंक मांग (तत्काल कॉलर के लिए अनुमति जांच) की आवश्यकता है, लेकिन लागू किए गए विधि टेस्टएचटीएमएल को तत्काल कॉलर के लिए अनुमति की जांच नहीं है, इसलिए एक सुरक्षा छेद है कि टेस्टएचटीएमएल के तत्काल कॉलर के पास पर्याप्त नहीं हो सकता है अनुमति, क्या वह सही समझ है? – George2

+1

@ जॉर्ज 2: जैसा कि मैं इसे समझता हूं, आप सही हैं। प्रक्रिया। स्टार्ट ने एक सुरक्षा जांच घोषित कर दी है। कॉलर को एक ही सुरक्षा जांच घोषित करनी चाहिए या सुनिश्चित करना चाहिए कि सुरक्षा का उल्लंघन नहीं किया जाएगा (और फिर चेक को अनदेखा करें)। –

+0

धन्यवाद Kb, मेरे पास कुछ नए विचार हैं और मुझे लगता है कि यह एक सुरक्षा छेद नहीं है। मान लें कि विधि Foo TestHtml और TestHtml कॉल प्रक्रिया को कॉल करता है। प्रारंभ करें। यहां तक ​​कि यदि TestDemand के साथ TestHtml सक्षम नहीं है, तो Sice Process.Start LinkDemand के साथ सक्षम है, यह हमेशा TestHtml की अनुमति की जांच करेगा (TestHtml तत्काल कॉलर है)। तो अगर फू के पास पर्याप्त अनुमति नहीं है, तो TestHtml से Process.Start पर कॉल विफल हो जाएगी। तो, मुझे कोई सुरक्षा समस्या नहीं है। कोई टिप्पणी? – George2

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