gpt4 book ai didi

java - 云服务的 SecurityManager "sandbox"

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:54 27 4
gpt4 key购买 nike

全部,

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

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

客户端代码应该被允许:

  • 在单个线程上占用尽可能多的 CPU 时间
  • 使用标准 java 类(例如 java.lang.Math、java.util.Random 等)执行任何计算
  • 调用任何捆绑在 jar 中的库(但必须遵守相同的限制)

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

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

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

最佳答案

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

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

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

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

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

什么是标准库?您是否知道他们是否/何时必须以特权方法执行某些代码。


每个客户 - 具有完全限制、进程关联/优先级、包括最大内存/堆栈等的独立 VM。

关于java - 云服务的 SecurityManager "sandbox",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4775084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com