如何锁定(或沙箱)JDK的内置Javascript解释器来运行不受信任的脚本

Bre*_*los 7 javascript security sandbox jdk1.6

我们有一个Java应用程序,并希望使用内置的Javascript解释器(javax.script.*)运行不受信任的代码

但是,默认情况下,解释器允许访问任何java类.例如java.lang.System.exit(0),脚本中的" "将关闭JVM.我相信这称为"Live Connect",有关详细信息,请参阅Sun的"Java脚本编程程序指南".

我想以某种方式关闭脚本访问Java类的能力,即我只希望脚本能够访问我使用eval()put()方法专门注入的对象ScriptEngine.

我找到了一些关于如何使用旧版独立版本的解释器(Rhino)实现此目的的文档,例如参见http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/

但是,如果不使用sun内部类,JDK 1.6中不可能采用这种方法,因为ClassShutter等都是内部设置的,不能用公共方法覆盖.

我希望有一个简单的方法,不需要使用自定义的SecurityManager,ClassLoader等跳过复杂的箍,但无法找到任何东西.

你会期望在不同的应用程序中围绕Javascript的安全公告的频率,会有一个简单的标志来禁用Live Connect!

Arn*_*ach 0

看一下java sandbox 库和关于如何准确地为 groovy 做你想要的事情的帖子(http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html)。可以用类似的方式解决犀牛问题。