2011-11-29 62 views
6

我在使用C#的能力來按需編譯代碼作爲腳本語言的基礎。我想知道,我如何對我正在執行的腳本進行沙盒處理,以便它們無法訪問文件系統,網絡等。基本上,我希望對正在運行的腳本擁有有限的權限。Assembly.CreateInstance和安全

的步驟,我採取:

CompilerResults r = CSharpCodeProvider.CompileAssemblyFromSource(source); 

Assembly a = r.CompiledAssembly; 

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

s.EntryPoint(...); 

回答

-2

編輯:無視的是,它不是安全!

檢出System.Security.Permissions.SecurityPermission(和子類FileIOPermission)和this tutorial。如果你想從臨時做不安全的行爲否認的代碼,你可以使用語句如下:

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

是否有任何東西阻止CallyourScriptHere()恢復您的示例中設置的所有權限? – MarkP

+0

'RevertAll'僅恢復當前堆棧幀中設置的CAS權限,因此在'CallYourScriptHere'中調用它只會撤消在該方法中所做的更改。 – MagnatLU

+0

這不能有效防範潛在的惡意代碼。請參閱http://blogs.msdn.com/b/shawnfa/archive/2006/02/02/523390.aspx,瞭解爲什麼不應將堆棧走路修飾符用於沙盒。 –