2010-07-16 23 views
8

我想以這樣一種方式託管動態語言運行時(DLR),以便在其中運行任意腳本的用戶無法關閉該進程?是否可以將.Net DLR託管在「防白癡」沙盒中?

DLR hosting spec描述瞭如何將DLR託管在單獨的ApplicationDomain中。這允許拆卸和卸載腳本運行時並通過CAS限制某些操作(例如,我可以限制文件系統訪問或禁止使用反射)。

但是,還有其他方法,例如: - 限制腳本使用的最大內存量? - 限制腳本創建的線程數量? - 檢測死鎖腳本?

我認爲使用爲SQL Server開發的unmanaged .net hosting API可以實現這種細粒度的控制。這是要走的方向嗎?是否有這種通用.net沙盒的開源項目?

這裏有一些可能有用的參考,我發現:

回答

3

看一看在Terrarium - 這是一個遊戲,你在.NET語言中建立你自己的自主小動物,然後他們被傳送到其他地方聯網計算機以及它們所描述的程序集。目標是讓你的生物接管整個生態系統,無論是通過殺死其他任何東西,還是通過戰略性管理食物資源。

我記得,任何花費超過0.n秒「思考」或n kb內存的小動物都會被刪除。

+0

非常有趣的項目。 :-)我剛剛下載了源代碼並做了一個非常快速的回顧:他們使用一個名爲「asmcheck」的本地代碼C++項目來從字面上反彙編「生物集合」並檢查它正在使用/訪問哪些.net類型。他們爲System.Threading.Thread等「禁用類型」使用硬編碼的黑名單。雖然這是一個非常有趣的解決方案,但我認爲這種方法不能直接應用於DLR。 – blueling 2010-07-16 23:55:21

+0

真的嗎?這有點令人驚訝。 我一直認爲他們使用CAS:http://en.wikipedia.org/wiki/Code_Access_Security – 2010-07-17 00:00:29