8
我想以這樣一種方式託管動態語言運行時(DLR),以便在其中運行任意腳本的用戶無法關閉該進程?是否可以將.Net DLR託管在「防白癡」沙盒中?
DLR hosting spec描述瞭如何將DLR託管在單獨的ApplicationDomain中。這允許拆卸和卸載腳本運行時並通過CAS限制某些操作(例如,我可以限制文件系統訪問或禁止使用反射)。
但是,還有其他方法,例如: - 限制腳本使用的最大內存量? - 限制腳本創建的線程數量? - 檢測死鎖腳本?
我認爲使用爲SQL Server開發的unmanaged .net hosting API可以實現這種細粒度的控制。這是要走的方向嗎?是否有這種通用.net沙盒的開源項目?
這裏有一些可能有用的參考,我發現:
- Discover Techniques for Safely Hosting Untrusted Add-Ins with the .NET Framework 2.0
- Host protection DLR討論名單上的螺紋
- Using Host Protection(.NET安全博客)
非常有趣的項目。 :-)我剛剛下載了源代碼並做了一個非常快速的回顧:他們使用一個名爲「asmcheck」的本地代碼C++項目來從字面上反彙編「生物集合」並檢查它正在使用/訪問哪些.net類型。他們爲System.Threading.Thread等「禁用類型」使用硬編碼的黑名單。雖然這是一個非常有趣的解決方案,但我認爲這種方法不能直接應用於DLR。 – blueling 2010-07-16 23:55:21
真的嗎?這有點令人驚訝。 我一直認爲他們使用CAS:http://en.wikipedia.org/wiki/Code_Access_Security – 2010-07-17 00:00:29