2

クラスパスからJavaスクリプトAPIのスクリプトにインポートする機能を無効にすることはできますか?目標は、スクリプトの実行時に、エンジンのバインディングにあるものにのみアクセスできるようにスクリプト作成者を残すことです。場合によっては、ランダムなクラスをスクリプトにインポートすると、セキュリティの問題になる可能性があります。

4

2 に答える 2

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();
}

ただし、これにはまだできるという警告があります

java.lang.Class.forName('foo.bar.Zap')
于 2012-04-27T10:56:06.597 に答える
0

インポート関数へのすべての呼び出しを制限することが目的の場合は、ScriptEngineの初期化時にそれらをnullにするだけです。

engine.eval("importPackage = null;");
于 2013-09-18T00:15:08.047 に答える