gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:36:49 27 4
gpt4 key购买 nike

我希望能够运行不受信任的 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 freaky sandbox 的水平。但是,我不知道那个沙箱代码是否被积极维护,或者他/他们是否曾经解决过无限循环等漏洞。

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

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

但请记住并不断重复,“SAFE 无法应对敌对”。

关于ruby - 如何在安全的沙箱中运行不受信任的 Ruby 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169303/

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