如何在安全沙箱中运行不受信任的 Ruby 代码?

2024-02-09

我希望能够运行不受信任的 ruby​​ 代码。我希望能够将变量传递给它可能使用的不受信任的代码。我还希望上述代码返回结果给我。这是我的想法的一个概念示例

input = "sweet"
output = nil
Thread.start {
   $SAFE = 4
   #... untrusted code goes here, it uses the input variable(s)
   #to calculate some result that it places in the output variable
}
#parse the output variable as a string.

只是为了澄清,我基本上将不受信任的代码用作函数。我想要 提供它的一些输入,然后允许它写入输出。这就是我真正想要的,我不在乎它是如何完成的,我只想要能够使用不受信任的 Ruby 代码作为一种函数。该解决方案不必看起来像我上面编写的代码,我只是用它来说明我想要的内容。

现在,我目前可以想到 3 种方法来做到这一点:

  1. 使用上面的 $SAFE 级别构造。
  2. 为什么theluckystiff 有一个 ruby​​ 沙盒插件
  3. 我可以使用某种操作系统虚拟化软件(例如 vmware 或 Xen 等)在其自己的虚拟机中运行每个功能。

我想知道是否有人对以功能方式运行不受信任的 ruby​​ 代码有任何建议?您会推荐什么选择?你会怎样做呢?谢谢。


$SAFE 还不够;你至少需要达到 Why's 怪异沙盒的水平。但是,我不知道沙箱代码是否得到积极维护,或者他/他们是否解决了诸如无限循环等漏洞。

不安全通常意味着敌对。如果您可以从敌对状态放松到“天真”状态,并且根据应用程序的要求,您可能会摆脱 Ruby 中的沙箱的困扰。这在语言设计上并不是真正一流的场景。

但即便如此,您可能也不需要进入机器级别的分离。我觉得在单独生成的进程中使用沙箱非常安全,您的应用程序充当进程管理器来杀死任何设法挂起/燃烧的进程。现在,这比上面的简单块要多几个数量级的工作。

但请记住并不断重复,“安全部门无法应对敌对行为”。

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

如何在安全沙箱中运行不受信任的 Ruby 代码? 的相关文章

随机推荐

  • jQuery 悬停在表格上的效果

    我是 jQuery 新手 我想在我的桌子上制作悬停效果 但我不知道如何做 我只想将文本设为红色 然后在焦点丢失时如何再次删除红色 这是我到目前为止所拥有的 table border 1 tr th ID th th name th tr t
  • 使用四元数的设备方向

    我编写了一个 JS SDK 来监听移动设备旋转 提供 3 个输入 角度范围为 0 到 360 度 180 到 180 度之间的角度 90 到 90 度之间的角度 设备轮换的文档 https www sitepoint com using d
  • 拖放数据时清除输入字段

    我编写了一个函数 当用户将注意力集中在输入字段上时 该函数会自动清除输入字段的预设值 如果用户没有输入任何值 则将其恢复为模糊状态 所以的价值
  • 触摸浏览器中的元素(如指针事件:无)

    问题 我搜索了又搜索 但找不到有关如何通过覆盖元素触发触摸事件的信息 我通过使用以下方法解决了鼠标单击事件的问题 pointer events none 这很简单 但它不适用于触摸事件 我知道有一些移动原生的东西可以解决这个问题 但这纯粹是
  • 如何使用 Entity Framework 4.1 将连接字符串传递给数据库优先 DBContext 的构造函数?

    由于各种原因我想not将我的实体框架数据库模型的连接字符串存储在各种 config 文件之一中 我将最新最好的 DBContext API 与新的实体框架版本 4 1 NET 4 和 Visual Studio 2010 C 结合使用 但是
  • 为什么重写的函数首先被调用?

    我执行了以下程序 我对得到的输出感到好奇 其中函数输出首先被打印 即使它是我尝试首先打印的变量 class Baap public int h 4 public int getH System out println Baap h retu
  • 生产环境中无法解释的 SQL 错误 - 可能与网络相关

    我正在做一些相当密集的数据库工作 最终将很多很多记录插入到数据库中 为了尽量减少上下文膨胀 我一次执行 100 个插入 处理上下文 然后重新创建上下文 我收到一些我不明白的奇怪错误 这些错误仅发生在我们的生产服务器上 但在开发服务器上一切正
  • iOS 9 CollectionView 速度变慢

    我一直在为 iOS8 开发我的应用程序 并且在滚动速度方面还没有遇到任何问题 当我升级到 iOS9 时 collectionView 变得非常不稳定和令人震惊 我无法指出任何具体原因 在我的集合视图中 我的项目包含使用第 3 方库 SDWe
  • 如何检测 WiFi 网络共享状态

    我想知道如何检测 WiFi 网络共享的状态 我看过一篇文章 Android 2 3 wifi热点API https stackoverflow com questions 7048922 android 2 3 wifi hotspot a
  • 检查字符串是否在 python 中的 2 GB 字符串列表中

    我有一个大文件 A txt 2 GB 包含字符串列表 Question Q1 Q2 Q3 Ans1 Format links 现在我有另一个更大的文件 1TB 其中第二个位置包含上述字符串 Output a Question b The q
  • Java 8 流 - 对象的总和

    假设我有一个实现以下接口的对象列表 public interface Summable
  • Pytorch 张量索引:如何通过包含索引的张量收集行

    我有张量 ids 形状 7000 1 包含索引 例如 1 0 2 x 形状 7000 3 255 ids张量编码粗体标记维度的索引x应该选择哪个 我想将选定的切片收集到结果向量中 result 形状 7000 255 背景 我对这 3 个元
  • 关于 Arm 处理器上的 conda 发行版/通道的混乱

    我已经使用 Anaconda 几年了 但自从我开始使用带有 M1 处理器的 Mac 以来 我不得不处理一些软件包安装的一系列问题 这让我对一些基本概念有点困惑 例如 我试图安装 Tensorflow 结果发现正确的方法是安装 minifor
  • 使用 psycopg 准备的语句

    我是 python 的初学者 我们使用此代码来执行 SQL 命令 cur execute INSERT INTO test num data VALUES s s 100 abcdef 我想知道这是准备好的声明还是只是客户端引用 不 不是
  • 为什么使用隐式解包或强制解包让应用程序在某个阶段崩溃没有好处?

    我的观点是 在某些地方 我们知道该变量根本不会为零 但由于某种原因 我们无法在类的 init 函数中实例化它 因此我们必须将其设为可选 我也知道我们可以使用可选的绑定或防护技术来轻松摆脱它 但在我看来 由于隐式解包 强制解包而让应用程序因一
  • 在 asp.net 中使用对象标签

    我有这个 html 代码 用于在 aspx 页面中嵌入视频
  • Java 线程和核心数

    我只是有一个关于处理器和线程如何工作的快速问题 根据我目前的理解 一个核心一次只能执行1个进程 但是我们能够生成一个数量大于我们拥有的核心数量 假设为 4 的线程池 假设为 30 并让它们同时运行 如果我们只有 4 个核心 这怎么可能 我还
  • 如何让onDragListener和onTouchListener协同工作?

    我使用 onDragListener 在屏幕上拖动一个对象 这部分效果很好 但我还需要在拖动时检查屏幕的 x y 坐标 我重写了 onTouch 方法 它也运行良好 但是一旦我拖动对象 ontouch 侦听器就不起作用 我无法让两个听众一起
  • Android 5.0 模拟器显示存储空间耗尽

    我刚刚将 Android SDK 更新到版本 21 并尝试启动模拟器 我使用的是 Nexus 4 其 CPU Intelatom x86 768 RAM 和 524 内部存储 模拟器启动正常 但显示错误消息 存储空间耗尽 并且速度非常慢 我
  • 如何在安全沙箱中运行不受信任的 Ruby 代码?

    我希望能够运行不受信任的 ruby 代码 我希望能够将变量传递给它可能使用的不受信任的代码 我还希望上述代码返回结果给我 这是我的想法的一个概念示例 input sweet output nil Thread start SAFE 4 un