2011-06-02 80 views
12

我正在研究可能由用戶提供的Groovy腳本進行擴展的服務器應用程序。很明顯,我想確保這些腳本運行在一個非常緊湊的沙箱中,它們不會破壞核心應用程序代碼或消耗太多資源來重載服務器。防彈groovy腳本嵌入

我研究各種可能性,最終的解決方案可能是它們的組合:

  • 運行一個非常有限的安全管理內的腳本。腳本在沒有權限的SecurityManager中運行。額外的權限必須聲明(如Android)。

  • 啓動新的JVM。在Runtime.exec周圍創建一個ScriptProcess包裝器,並生成一個帶有安全管理器,有限堆等的新JVM。因爲我們啓動了一個全面的過程,我們可能在監視不良行爲的過程中獲得更多控制權。雖然資源成本會很嚴峻......另一種方法是在這裏使用Ant,但是它可以擴展嗎?

  • Java監視器API在Java 6中,有一個具有監視容量的包。我們可以監控線程,並可能檢測到無限循環和內存消耗。任何人使用過?

這些是我今天想到的。確保這些腳本的行爲正確並保持一定的可伸縮性和性能的最佳方法是什麼?

回答

8

另一種可能性是在運行嵌入式腳本的GroovyShell上使用Groovy 1.8編譯定製器。您可以預先導入類和方法,限制使用Groovy AST,並預先應用AST轉換,例如@ThreadInterrupt,@TimedInterrupt或@ConditionalInterrupt。在詳細介紹:

http://www.jroller.com/melix/entry/customizing_groovy_compilation_process

+0

是的,我認爲這是要走的路。我會看看內置的定製器和變壓器。如果有人預先建立了緊密的無限循環和內存消耗限制器,那將是非常棒的。 – 2011-06-02 11:25:47