2011-11-29 13 views
6

मैं एक स्क्रिप्टिंग भाषा के आधार पर मांग पर कोड संकलित करने की सी # की क्षमता का उपयोग करने के विचार के साथ घूम रहा हूं। मैं सोच रहा था, मैं उन स्क्रिप्ट को कैसे सैंडबॉक्स कर सकता हूं जिन्हें मैं निष्पादित कर रहा हूं ताकि वे फ़ाइल सिस्टम, नेटवर्क इत्यादि तक नहीं पहुंच सकें। असल में, मुझे स्क्रिप्ट चलाने पर प्रतिबंधित अनुमतियां चाहिए।असेंबली। क्रिएट इंस्टेंस और सुरक्षा

कदम है कि मैं ले:

CompilerResults r = CSharpCodeProvider.CompileAssemblyFromSource(source); 

Assembly a = r.CompiledAssembly; 

IScript s = a.CreateInstance(...); 

s.EntryPoint(...); 

उत्तर

2

इस के लिए दृष्टिकोण की सिफारिश की एक sandboxed appdomain में संदिग्ध कोड निष्पादित करने के लिए है। http://blogs.msdn.com/b/shawnfa/archive/2006/04/19/579066.aspx पर कई कारण दिए गए हैं, और यह भी एक और महत्वपूर्ण बात यह है कि अन्य संभावित दृष्टिकोणों को .NET 4.0 के रूप में बहिष्कृत किया गया है।

-2

संपादित करें: उपेक्षा है कि, यह सुरक्षित नहीं है!

System.Security.Permissions.SecurityPermission (और FileIOPermission जैसे सबक्लास) और this tutorial देखें। आप असुरक्षित कार्रवाई करने से इनकार कोड अस्थायी करना चाहते हैं, तो आप इस तरह के बयानों का उपयोग कर सकते हैं:

NamedPermissionSet ps = new NamedPermissionSet("Nothing"); 
ps.Deny(); 
CallYourScriptHere(); 
CodeAccessPermission.RevertAll(); 
+0

क्या आपके उदाहरण द्वारा निर्धारित सभी अनुमतियों को वापस करने से CallyourScriptHere() को रोकना कुछ भी है? – MarkP

+0

'रिवर्टअल' केवल मौजूदा स्टैक फ्रेम में सेट सीएएस अनुमतियों को वापस लाता है, इसलिए इसे 'CallYourScriptHere' में कॉल करना केवल उस विधि में किए गए परिवर्तनों को पूर्ववत करेगा। – MagnatLU

+0

यह संभावित रूप से दुर्भावनापूर्ण कोड के खिलाफ प्रभावी सुरक्षा नहीं है। Http://blogs.msdn.com/b/shawnfa/archive/2006/02/02/523390.aspx देखें कि क्यों स्टैक चलने वाले संशोधकों को सैंडबॉक्सिंग के लिए उपयोग नहीं किया जाना चाहिए। –

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

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