我们有一个Java应用程序,希望使用内置的Javascript解释器(javax.script.*)运行不受信任的代码。然而,默认情况下,解释器允许访问任何Java类。例如,在脚本中使用"
我希望以某种方式关闭脚本访问Java类的功能,即我只想让脚本能够访问我使用
我已经找到了一些关于如何在旧版本的独立解释器(Rhino)中实现此目标的文档,例如参见http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/。
但是,在JDK 1.6中,这种方法不可能使用sun内部类,因为ClassShutter等都是内部设置的,不能用公共方法覆盖。
我希望有一种简单的方法来解决这个问题,而不需要通过自定义SecurityManager、ClassLoader等复杂的方法。但是我还没有找到任何东西。
考虑到不同应用程序中围绕Javascript发布的安全公告的频率,你会期望有一个简单的标志来禁用Live Connect!
java.lang.System.exit(0)
"将关闭JVM。我相信这被称为"Live Connect",请参阅Sun的"Java Scripting Programmer's Guide"获取更多详细信息。我希望以某种方式关闭脚本访问Java类的功能,即我只想让脚本能够访问我使用
ScriptEngine
上的eval()
或put()
方法明确注入的对象。我已经找到了一些关于如何在旧版本的独立解释器(Rhino)中实现此目标的文档,例如参见http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/。
但是,在JDK 1.6中,这种方法不可能使用sun内部类,因为ClassShutter等都是内部设置的,不能用公共方法覆盖。
我希望有一种简单的方法来解决这个问题,而不需要通过自定义SecurityManager、ClassLoader等复杂的方法。但是我还没有找到任何东西。
考虑到不同应用程序中围绕Javascript发布的安全公告的频率,你会期望有一个简单的标志来禁用Live Connect!
java.awt.Desktop.getDesktop()
"或"java.lang.System.exit(0)
"这样的东西,那么实现几乎是不可能的。 - chrixm