想象一下從標準輸入讀取並寫入標準輸出的不可信應用程序(插件)。如何包裝不可信的應用程序?
如何獲得由此應用程序返回的指定輸入的輸出防止任何副作用?
例如,如果應用程序刪除磁盤上的文件,應該檢測到該文件,並且應該取消該嘗試。
這是某種包裝應用程序。是否有可能構建它?
較簡單的任務太有意思了:使用.NET製作這個包裝器(主機和客戶端都是用.NET語言編寫的)。
想象一下從標準輸入讀取並寫入標準輸出的不可信應用程序(插件)。如何包裝不可信的應用程序?
如何獲得由此應用程序返回的指定輸入的輸出防止任何副作用?
例如,如果應用程序刪除磁盤上的文件,應該檢測到該文件,並且應該取消該嘗試。
這是某種包裝應用程序。是否有可能構建它?
較簡單的任務太有意思了:使用.NET製作這個包裝器(主機和客戶端都是用.NET語言編寫的)。
最安全的方法是將該插件加載到您配置爲security evidence for the requirements you have的separate AppDomain中。
當您創建AppDomain時,您可以指定代碼在此沙箱中可以執行的操作種類。在那裏運行的代碼僅限於您設置的限制。但是這個過程可能會讓你第一次感到困惑,並且可能會讓你接觸到漏洞。
使用AppDomains來隔離程序集是一個有趣的過程。你會認爲你將你的插件加載到另一個AppDomain中,然後通過你的AppDomain中的代理來使用它們,但是反過來也是如此。他們需要在他們的AppDomain中使用你的代理。如果您無法理解並正確執行此操作,則最終會將您的插件代碼加載到您的主AppDomain中,並在那裏執行它,而不是在受限域中。如果你沒有正確地做事,你會得到很多苦頭(訂閱事件有一些有趣的副作用)。
我會建議原型設計,通過C#在CLR中的AppDomain章節中刷新,並儘可能多地閱讀該主題。
這是我爲調查跨應用程序域事件所做的測試應用程序。
http://cid-f8be9de57b85cc35.skydrive.live.com/self.aspx/Public/appdomainevents.rar
您是否使用安全性有限的應用程序域進行了研究? – 2009-09-11 13:22:20