2012-04-27 5 views
2

クラスパスからJavaスクリプトAPIのスクリプトにオブジェクトをインポートする機能を無効にすることはできますか? スクリプトの実行時に、エンジンのバインディングにあるものだけにアクセスできるようにスクリプターを残すことが目的です。場合によっては、ランダムなクラスをスクリプトにインポートすることはセキュリティ上の問題となります。JavaスクリプトでimportPackage、importClassおよびJavaImporterを無効にする

答えて

1

一つは、これらの関数の定義を上書きし、このようなスクリプトをサニタイズすることができます

private String sanitizeScript(String script) { 
    if (containsMoreThanOneStatement(script)) { 
     throw new ScriptedPermissionsException("Scripts may only contain one statement!!"); 
    } 
    return new StringBuilder() 
      .append("function importPackage(a){ throw 'Cannot import!'};").append('\n') 
      .append("function importClass(a){ throw 'Cannot import!'};").append('\n') 
      .append("function JavaImporter(a){ throw 'I said, no importing!!'};").append('\n') 
      .append(script).append(';') 
      .toString(); 
} 

しかしこれはまだあなたの意図は制限する場合には1はまだ

java.lang.Class.forName('foo.bar.Zap') 
0

を行うことができますことを警告していますインポート関数の呼び出しは、ScriptEngineの初期化時にnullを返します。

engine.eval("importPackage = null;");