我已經設置了一個小例子,其中我將一個程序集加載到沒有任何權限的新AppDomain中。這工作正常,程序集無法訪問文件系統並且無法偵聽套接字。阻止在AppDomain中創建線程
但還有一件事我想要防止:創建線程。爲什麼?原因理論上這個程序集可以創建一個線程,創建更多的線程和洪水我的記憶。
我想到了(在我看來)最好的方法:限制AppDomain的內存。這可能嗎?如果不是,我能做些什麼來避免創建線程?
使用此代碼來創建線程
Thread t = new Thread(this.DoWork);
t.Start();
而這種代碼在AppDomain
PermissionSet set = new PermissionSet(PermissionState.None);
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
set.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read |
FileIOPermissionAccess.PathDiscovery,
this.path));
AppDomainSetup info = new AppDomainSetup { ApplicationBase = this.path };
this.domain = AppDomain.CreateDomain("Sandbox", null, info, set, null);
(好吧,我給訪問該文件夾中的文件系統,我想加載組裝,這只是因爲StrongName fullTrustAssembly = typeof(SecureInstance).Assembly.Evidence.GetHostEvidence<StrongName>();
不適合我。
希望可以幫忙。(:
沒辦法,你可以這樣做AFAIK :)你可以做的唯一的事情就是設置線程池中線程的限制 – Elastep 2011-12-27 12:03:49
AFAIK每個AppDomain需要創建至少一個線程 - 否則它不能運行...所以禁用線程創建意味着它不能運行在所有恕我直言。你想達到什麼目的? – Yahia 2011-12-27 12:07:24
@Elastep感謝您的回答,但這是安全的嗎?我認爲可以在任何軟件上擴展線程限制。整個事情給Java帶來了很大的好處。在Java中,SecurityManager在線程創建之前被詢問。 – 2011-12-27 12:09:24