java – 用于云服务“沙盒”的SecurityManager

前端之家收集整理的这篇文章主要介绍了java – 用于云服务“沙盒”的SecurityManager前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所有,

我正在设计基于云的服务,该服务将提供执行客户提交的一些“插件代码的选项.为了完成这项工作,插件不能威胁系统完整性或具有访问其他客户端数据的能力.

理想情况下,我希望客户端可以提交一个简单的jar文件(包含符合某些预定义接口的类),然后在沙箱中运行.

应允许客户端代码

>在单个线程上占用所需的cpu时间
>使用标准java类(例如java.lang.Math,java.util.Random等)执行任何计算.
>调用jar中捆绑的任何库(但必须遵守相同的限制)

但我特别需要禁止以下内容

>生成新线程(以便可以公平地管理服务器资源!)
>对文件系统/ IO /网络的任何访问权限
>对本机代码的任何访问权限
>除了传递给客户端代码/由客户端代码创建的数据之外,对JVM中的数据的任何访问权限
>对除.jar沙箱中的类以外的类的反射的任何访问权限
>除了标准Java库之外,还能够在沙箱外部的对象上调用方法

是否可以使用自定义ClassLoader / SecurityManager设置来实现此目的?或者我是否需要开始寻找更复杂的解决方案(例如启动多个JVM?)

解决方法

在java中无法管理资源和限制资源.您可以阻止恶意代码访问系统资源(磁盘/网络等)或JVM本身,但是:

Spawning new threads (so that server resource can be fairly managed!)

>如果我想要恶意,我将在终结器线程中执行所有代码并阻止VM.同样做pro​​tected void finalize(synchronized(Thread.class){for(;;)LockSupport.park();}}再见新线程.
>吃所有的记忆,吃所有的直接记忆等.
>在我自己的jar中访问zip文件,并期望它们被移走,因此JVM崩溃(由于zlib中的bug)

如果一个人故意想要拒绝资源,那么试图抓住黑客就不是一个可行的任务.您需要知道要搜索内容并在运行时动态检查/增强类以禁止该行为.

Any ability to call methods on objects outside the sandBox,other than the standard Java libraries

什么是标准库?你知道他们是否/何时必须在特权方法中执行某些代码.

每个客户 – 具有完全限制的单独VM,进程关联性/优先级,包括最大内存/堆栈等.

猜你在找的Java相关文章