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 时将它们设为空

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