加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 03:03:39 所属栏目:Java 来源:网络整理
导读:所有, 我正在设计基于云的服务,该服务将提供执行客户提交的一些“插件”代码的选项.为了完成这项工作,插件不能威胁系统完整性或具有访问其他客户端数据的能力. 理想情况下,我希望客户端可以提交一个简单的jar文件(包含符合某些预定义接口的类),然后在沙箱中
所有,

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

理想情况下,我希望客户端可以提交一个简单的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,进程关联性/优先级,包括最大内存/堆栈等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读