在java中安全地运行javascript代码

时间:2016-07-19 17:17:52

标签: javascript java rhino

如果这个标题不清楚,我很抱歉,因为我不知道所有的术语,所以请耐心等待。

所以我试图创建一个受控环境来运行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%必要。

1 个答案:

答案 0 :(得分:2)

对Nashorn使用ClassFilter(注意:要求Java> = 1.8.0_40)