簡體   English   中英

沙盒JSR-223

[英]Sandboxing JSR-223

我正在嘗試沙箱JSR-223。 具體來說,我不希望任何腳本可以訪問我的任何類。 (我聽說Rhino可以用ClassShutter做到這一點,但我想一般性地做。即對於JSR-223的所有腳本引擎)。

我首先嘗試使用AccessController.doPrivileged解決方案, 完全不傳遞任何權限 它適用於大多數權限,但腳本仍然可以訪問我的所有公共類(它似乎忽略“包訪問”權限......?)。

找到了這個 我的問題是:如何在腳本引擎上安裝自定義ClassLoader? (或者,如果必須,如何全局替換ClassLoader?)

ScriptEngineManager有一個構造函數,它接受一個類加載器。 類加載器用於加載腳本引擎實現。 當類繼承其類加載器時,腳本引擎及其創建的任何對象也應該使用該類加載器。

該類加載器需要拒絕存在任何未列入白名單的類。

最后使用自定義SecurityManager,以便您可以對正在使用的類加載器進行訪問檢查。

編輯:這是我在Java中使用Sandboxing Rhino發現的一篇文章。 其中大部分內容也適用於JSR-223。 Sun的實現是Rhino的修改,因此可能存在一些差異。

是否可以在單獨的JVM中運行需要腳本引擎的應用程序部分? 您可以使用不同的類路徑(和安全管理器)啟動腳本引擎JVM,然后在兩個JVM之間使用某種形式的輕量級消息傳遞。

請參閱http://code.google.com/p/prebake/source/browse/trunk/code/src/org/prebake/js/RhinoExecutor.java以及相同包中的相關類,尤其是那里的SANDBOXING_FACTORY。

這是一些代碼,用於對rhino解釋器進行沙盒化,以允許它訪問由加載器調解的文件系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM