【发布时间】:2011-01-23 17:07:28
【问题描述】:
全部,
我正在设计一种基于云的服务,该服务将提供执行客户提交的某些“插件”代码的选项。为了完成这项工作,插件不能威胁系统完整性或具有任何访问其他客户端数据的能力是至关重要的。
理想情况下,我希望客户可以提交一个简单的 jar 文件(包含符合某些预定义接口的类),然后该文件将在沙箱中运行。
应该允许客户端代码:
- 在单个线程上占用尽可能多的 CPU 时间
- 使用标准 java 类(例如 java.lang.Math、java.util.Random 等)执行任何计算
- 调用捆绑在 jar 中的任何库(但必须遵守相同的限制)
但我特别需要禁止以下内容:
- 生成新线程(以便公平管理服务器资源!)
- 对文件系统/IO/网络的任何访问
- 任何对本机代码的访问
- 对 JVM 中数据的任何访问,而不是传递给客户端代码/由客户端代码创建的数据
- 对除 .jar 沙箱中的类以外的类的反射的任何访问
- 任何在沙盒外(标准 Java 库除外)对象上调用方法的能力
是否可以通过自定义 ClassLoader / SecurityManager 设置来实现这一点?还是我需要开始寻找更复杂的解决方案(例如启动多个 JVM?)
【问题讨论】:
标签: java security architecture plugins cloud