2017-03-01 14 views
1

Javaアプリケーション内でSandbox実行Nashornを実行する方法について明確な回答を得たいと思います。埋め込みNashorn - サンドボックス実行

私は「類似の質問」(私が参照する)を見ましたが、最終的に答えのどれも私の懸念に対処していないようです。

定義から始めましょう。 JavaScriptが有効範囲に追加1以外の任意のJavaオブジェクトにアクセスしてはならないことを保証する「サンドボックス」私が意味することで

ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); 
engine.put("map",new HashMap()); 
engine.eval(jsCode); // jsCode can access 'map' only. 

は、私たちがこれを始めるとします。

ですので、次のような証拠が必要です。

engine.eval("map.toString()"); 
engine.eval("map.size()"); 
engine.eval("map.put('name','jeff'); "); 
engine.eval("map.getClass()"); 

しかし、次の試用版ではないでしょう:最後に

engine.eval("var m = new java.util.HashMap();"); // <-- stop accessing Java 
engine.eval("map.getClass().forName('java.io.File'); "); // stop. it's trying to be sneaky 

、私はこのことについて心配していない午前:

engine.eval("while(1) {;}"); // this is impossible to detect. Maybe it's possible for this simple case... but sneaky users could make it impossible to detect... anyway this is not what I am asking. I am only concerned on accessing java objects. 

だから私は、JavaオブジェクトにアクセスするにはjsCodeを防ぐために、予定のサンドボックス化によってその私は定義しない。

は、私は、これは潜在的な解決策になるかもしれないことを見た:

jdk.nashorn.api.scripting.NashornScriptEngineFactory factory = new jdk.nashorn.api.scripting.NashornScriptEngineFactory(); 
ScriptEngine engine = factory.getScriptEngine(new jdk.nashorn.api.scripting.ClassFilter() { 

    public boolean exposeToScripts(String s) { 
     return false; 
    } 

}); 

が、それは、JDKで始まるパッケージにアクセスするために「安全」である*直接。?

私が見たもう一つのアプローチは、より神秘的である:

final ScriptEngine engine = 
    new NashornScriptEngineFactory().getScriptEngine(new String[] { "--no-java" }); 

私はここに1ことを見た: Safely re-using sandboxed Nashorn containers

は、誰かが私が知っていることはできますか?

答えて

0

アプリケーションで役立つ場合は、jdk.nashorn.api.scripting。* APIを使用できます。 javadocはここにあります - >https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/

そして、--no-javaは、スクリプトコードからJavaパッケージへのアクセスを防ぐためのオプションです。

+0

"--no-java"は正式には記載されていません。確かにjavadocにはありません。それは安全ですか? – Zo72

+0

@sundararajan将来のバージョンで '--no-java'がサポートされるかどうか、または実験的なものかどうかは教えてください – Zo72

+0

厳密にはjjs -helpで表示されるオプションのみjjsツールとnashornのオプションがサポートされています。しかし、そのようなオプションは削除される可能性は低いです。 –

関連する問題