用于云服务“沙盒”的 SecurityManager

2024-04-22

All,

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

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

应允许客户端代码:

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

但我特别需要禁止以下行为:

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

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


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

产生新线程(以便可以公平地管理服务器资源!)

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

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

任何调用沙箱外部对象(标准 Java 库除外)方法的能力

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于云服务“沙盒”的 SecurityManager 的相关文章

  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • Java中定义类型后同时初始化多个变量?

    这里需要一些语法方面的帮助 我正在尝试在定义类型后重新初始化多个变量 例如 int bonus sales x y 50 这工作正常 但是我想稍后在程序中将不同的值放入其中一些变量中 但我收到语法错误 bonus 25 x 38 sales
  • 在哈希图中存储字符和二进制数

    我正在尝试存储字母到二进制数的映射 这是我的映射 h 001 i 010 k 011 l 100 r 101 s 110 t 111 为此 我创建了一个哈希映射并存储了键值对 我现在想显示给定句子的相应二进制值 这是我的代码 package
  • 使用 JAXB 编组 LocalDate

    我正在构建一系列链接类 我希望能够将其实例编组到 XML 以便我可以将它们保存到文件中并稍后再次读取它们 目前我使用以下代码作为测试用例 import javax xml bind annotation import javax xml b
  • java中队列的实现

    在 Java 中实现队列是一个非常常见的面试问题 我在网上冲浪 看到了许多实现 他们做了一些奇特的事情 比如实现队列接口和编写自己的addLast and removeFirst 方法 我的问题是我不能使用LinkedList 类并使用其预
  • Maven 目标的默认阶段?

    据我了解 在 Maven 中 插件目标可以附加到生命周期阶段 如果没有定义 默认阶段是什么 根据我的经验 这取决于插件的目标 例如 组装 单个 http maven apache org plugins maven assembly plu
  • 您的 Web 服务版本控制最佳实践是什么?

    我们有 2 个独立的产品 需要通过 Web 服务相互通信 支持 API 版本控制的最佳实践是什么 I have 本文 http www ibm com developerworks webservices library ws versio
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • MessageDigest MD5 算法未返回我期望的结果

    我脑后的某个东西告诉我 我在这里遗漏了一些明显的东西 我正在将现有的 java 项目与第三方 api 集成 该第三方 api 使用 api 密钥的 md5 哈希进行身份验证 它对我不起作用 在调试过程中我意识到我生成的哈希值与他们提供的示例
  • 更改 RowLayout SWT Java 中元素的顺序

    有没有办法更改在行布局中创建的元素的顺序 我想将其显示在元素中 首先显示 例如 如果我创建 element1 则 element2 element3 element4 我想看到的布局为 元素4 元素3 元素2 元素1 这意味着最后创建的元素
  • 删除 ArrayList 对象问题

    我在处理作业时遇到从 ArrayList 中删除对象的问题 如果我使用 正常 for 循环 它的工作原理如下 public void returnBook String isbn for int i 0 i lt booksBorrowed
  • Hibernate @OneToMany 注释到底是如何工作的?

    我对 Hibernate 还很陌生 我正在通过教程学习它 我在理解到底如何一对多注释作品 所以我有这两个实体类 Student代表一个学生并且Guide代表指导学生的人 因此 每个学生都与一名向导相关联 但一名向导可以跟随多个学生 我想要一
  • 为什么 RMI 注册表忽略 java.rmi.server.codebase 属性

    我正在运行 java RMI 的 Hello World 示例 1 我在空文件夹中运行注册表 motta motta laptop tmp rmiregistry 2 我启动 HTTP 服务器以在运行时检索类 下载文件夹包含客户端 服务器的
  • 在方法内声明类 - Final 关键字 [重复]

    这个问题在这里已经有答案了 给定方法中的以下内部类 IsSomething public class InnerMethod private int x public class Something private int y public
  • Java 8根据Map属性过滤Map对象列表以删除一些重复项

    Have a List
  • 如何将任务添加到 gradle 中的主要“构建”任务

    当我尝试使用以下代码将任务添加到主构建任务时 rootProject tasks getByName build dependsOn mytask 当我跑步时它抱怨gradle w build输出 Where Build file line
  • 如何使用 SAX Java 解析器读取注释文本

    我只想使用 Java 中的 SAX 解析器读取 XML 文件中对象标记的注释 这是我的文件的摘要
  • Java中的媒体播放器库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在评估用于在 Java 中播放音频 视频的库 它不需要 100 Java Java 与本机库的绑定
  • 当我在 Java 中输入 IP 时无法连接到我的服务器

    好的 我正在尝试学习 Java 客户端 服务器的内容 并且正在浏览教程代码 如下所示 当我将 localhost 更改为我的 IP 时 它会停止工作 请帮忙 编辑 127 0 0 1 似乎也可以工作 但不是我的真实IP Copyright

随机推荐

  • 如何在 Swift 中从备份中排除文件?

    我在 Swift 1 2 中工作得很好 因为我使用 filePath 作为字符串 现在 Swift 2 希望我们所有人都使用 URL 路径 尽管我正在阅读他们的文档 但我无法让它工作 I have var fileName myRespon
  • DEVISE 成功登录后,如何将用户重定向回之前需要登录的操作?

    我有一个 ajax 投票按钮 如果用户单击 竖起大拇指 图像 但尚未登录 那么他们应该看到一个对话框 要求他们先登录 为了实现这个对话框 我使用 jQuery 和 Facebox 绑定到 ajax failure 事件 如果用户未登录 De
  • 如何将 create-react-app 转换为 Preact?

    根据 Preact 文档 要将 React 应用程序转换为 Preact 您必须为 webpack 指定别名 resolve alias react preact compat react dom preact compat 你怎么能做到这
  • 我什么时候应该使用新的 ranged-for 以及我可以将它与新的 cbegin/cend 结合使用吗?

    The new 范围为当然 在 C 11 中会非常简洁和有用 据我了解它是如何工作的 它会查找 容器 begin and end通过尝试 Argument Depending Lookup ADT 但另一个补充是所有容器现在有cbegin
  • 使共享库可供多个应用程序使用的最佳方法是什么?

    与大多数商店一样 我们有一个团队负责各种项目 他们都需要访问与我们业务相关的相同核心信息和功能 通常使用 C 语言 目前 我们只是将公共类从一个项目复制到另一个项目 但每个人都开始有自己的风格 我们希望进行整合 我们使用 Tortoise
  • 如何在 f 字符串表达式中将数字格式化为两位小数?

    我正在尝试制作这个程序 询问用户他们的成绩并以两位小数显示他们的成绩 前任 如果他们的作业得分为 10 15 则会显示作业 1 66 66 在我的代码中 我似乎无法将计算出的数字转换为两位小数 print Please enter your
  • Django:使用 post_delete 信号时确定正在删除的用户

    我希望在删除某些对象时通知管理员 但我也想确定哪个用户正在执行删除 是否可以 这是代码 models py signal to notify admins when nodes are deleted from django db mode
  • 如何锁定 ASP.NET MVC 操作?

    我已经编写了一个用作服务的控制器和操作 这项服务的运行成本相当高 如果当前已存在正在运行的操作 我想限制对此操作的访问 有没有内置的方法来锁定 ASP NET MVC 操作 Thanks 您在寻找这样的东西吗 public MyContro
  • 如何使用准备好的 PDO 语句设置 ORDER BY 参数?

    我在使用参数时遇到问题ORDER BY我的 SQL 部分 它不发出任何警告 但不打印任何内容 order columnName direction ASC stmt db gt prepare SELECT field from table
  • Pandas 在由列表组成的元素上删除重复项

    假设我的数据框是 df pandas DataFrame 1 0 0 0 1 0 产生 0 0 1 0 1 0 0 2 1 0 我想删除重复项 并且只获取元素 1 0 和 0 0 如果我写 df drop duplicates 我收到以下错
  • Python向数据框添加列会导致NaN

    我有一个系列和 df s pd Series 1 2 3 5 df pd DataFrame 当我像这样向 df 添加列时 df loc 0 2 s iloc 0 3 df loc 1 3 s iloc 1 4 I get df 0 2 1
  • 如果存在则更改表,如果不存在则创建

    我需要运行一个安装程序 它也可以是更新程序 安装程序需要能够最终获得 mysql 数据库的特定方案 结构 无论某些表是否存在 丢失了几列 或者因为其结构是最新的而不需要更改 我怎样才能优雅地组合ALTER and CREATE 我在想一定有
  • 在数组中的两对之间添加键/值对

    我一直在寻找和思考 但无法想出一个可行的解决方案来解决这个问题 我有一个带有连续数字键的数组 Example Array 0 gt value 0 1 gt value 1 2 gt value 2 3 gt value 3 我需要在数组中
  • 查询列出数据库中每个表的记录数

    如何列出数据库中每个表的行数 一些相当于 select count from table1 select count from table2 select count from tableN 我将发布一个解决方案 但欢迎其他方法 如果您使用
  • 将对象序列化为 XML 时如何添加 XML 命名空间 (xmlns)

    我正在 XStream 的帮助下将对象序列化为 XML 如何告诉 XStream 将 xmlns 插入到对象的 XML 输出中 例如 我有一个想要序列化的简单对象 XStreamAlias value domain public class
  • 如何在 Spark Pipeline 中使用随机森林

    我想通过网格搜索和 Spark 交叉验证来调整我的模型 在 Spark 中 它必须将基础模型放入管道中 即管道办公室演示 http spark apache org docs latest ml guide html example mod
  • ASP.NET 自定义错误被忽略

    我在 web config 中配置了自定义错误 但 IIS 6 0 返回网站配置的 自定义错误 选项卡中指定的自定义错误
  • Coverage.py 无法发现子目录中没有 init.py 文件的测试

    当我运行 python 覆盖范围时 我总是需要一个空的 init py测试子目录中的文件以获得运行测试的覆盖范围 这是 python2 软件包的要求 但不是 python3 的要求 为了重现 我执行了以下操作 先决条件是 python3 p
  • XPath 和 Regexp 哪个更快?

    我正在为 firefox 制作一个附加组件 它使用 ajax 加载一个 html 页面 附加组件有它的 XUL 面板 现在 我没有寻找创建document对象并将ajax请求内容放入其中 然后使用xPath找到我需要的内容 相反 我加载内容
  • 用于云服务“沙盒”的 SecurityManager

    All 我正在设计一个基于云的服务 该服务将提供执行客户提交的一些 插件 代码的选项 为了使这项工作正常进行 插件不能威胁系统完整性或有能力访问其他客户端的数据 这一点至关重要 理想情况下 我希望客户端能够提交一个简单的 jar 文件 包含