【发布时间】:2016-07-19 17:17:52
【问题描述】:
对不起,如果这个标题不清楚,因为我不知道所有的术语,所以请多多包涵。
所以我正在尝试创建一个受控环境来在 Java 应用程序中运行任何 JavaScript 代码。注意:代码是由用户创建的,所以我必须阻止/阻止专门尝试访问/修改不应该到达的 java 变量的代码。 (最好通过为用户反馈抛出编译错误)
编辑 1:顺便说一下,我尝试使用 Rhino 和 Nashorn。
这是一个简单的例子。
public class ScriptRunner{
public Foo foo=new Foo();
//this is not supposed to be accessed by the script
public int money=0;
public Object run(){
return compiler.compile(STRING START (obtained from a file)
function main(someObject){
//this is not allowed
someObject.money=10000000000000000000000;
//or this
var someBlacklistedJavaObject=.....
someBlacklistedJavaObject.someFuncton();
//but this is allowed
someObject.foo.name="Bob";
return someObject.foo.someFunction();
}
STRING END).run("main",this);
}
}
此外,我不确定这是否是可能的解决方案之一,但由于一些无法访问的代码实现它并且不允许将安全对象设置为其他任何东西,我无法使用内置的 java 安全类。
我想到的是,一个简单的实现是在某个包中创建包装 Java 类。比检查脚本中的 java 对象是否没有该路径并引发错误。但问题是我不知道该怎么做。
编辑 2:保持较低的 Java 兼容性配置文件是可取的,但这不是 100% 必要的。
【问题讨论】:
-
你看过Nashorn吗?
-
是的,我做到了。我尝试的一切都给了我一个错误,即 Nashorn 的类不存在或无权访问。
标签: javascript java rhino