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