相关疑难解决方法(0)

安全Nashorn JS执行

如何使用Java8 Nashorn安全地执行一些用户提供的JS代码?

该脚本扩展了一些基于servlet的报告的计算.该应用程序有许多不同(不受信任)的用户.脚本应该只能访问Java对象和已定义成员返回的Java对象.默认情况下,脚本可以使用Class.forName()(使用我提供的对象的.getClass())实例化任何类.有没有办法禁止访问我没有明确指定的任何java类?

javascript java nashorn

42
推荐指数
6
解决办法
1万
查看次数

如何在沙盒中使用Rhino for Java运行Javascript?

我们的Java应用程序的一部分需要运行由非开发人员编写的javascript.这些非开发人员使用javascript进行数据格式化.(主要是简单的逻辑和字符串连接).

我的问题是如何设置这些脚本的执行以确保脚本错误不会对应用程序的其余部分产生重大负面影响.

  • 需要防范无限循环
  • 防止产生新线程.
  • 限制对服务和环境的访问
    • 文件系统(示例:如果心怀不满的脚本编写者决定删除文件)
    • 数据库(同样删除数据库记录)

基本上我需要设置javascript范围,只包括他们需要的内容,而不是更多内容.

javascript java sandbox rhino

36
推荐指数
3
解决办法
1万
查看次数

如何锁定(或沙箱)JDK的内置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!

javascript security sandbox jdk1.6

7
推荐指数
1
解决办法
930
查看次数

标签 统计

javascript ×3

java ×2

sandbox ×2

jdk1.6 ×1

nashorn ×1

rhino ×1

security ×1