在Java Scripting中禁用importPackage,importClass和JavaImporter

时间:2012-04-27 08:30:12

标签: java security scripting

是否可以禁用将类路径中的内容导入java脚本API中的脚本的功能? 目标是在脚本运行时让脚本编程只能访问引擎绑定中的内容。在某些情况下,将随机类导入脚本可能是一个安全问题。

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:0)

如果您的目的是限制对导入函数的所有调用,那么只在初始化ScriptEngine时将它们为空

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