如何使用Java8 Nashorn安全地执行一些用户提供的JS代码?
该脚本扩展了一些基于servlet的报告的计算.该应用程序有许多不同(不受信任)的用户.脚本应该只能访问Java对象和已定义成员返回的Java对象.默认情况下,脚本可以使用Class.forName()(使用我提供的对象的.getClass())实例化任何类.有没有办法禁止访问我没有明确指定的任何java类?
我们的Java应用程序的一部分需要运行由非开发人员编写的javascript.这些非开发人员使用javascript进行数据格式化.(主要是简单的逻辑和字符串连接).
我的问题是如何设置这些脚本的执行以确保脚本错误不会对应用程序的其余部分产生重大负面影响.
基本上我需要设置javascript范围,只包括他们需要的内容,而不是更多内容.
我们有一个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!