我希望能够运行不受信任的 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 种方法来做到这一点:
- 使用上面的 $SAFE 级别构造。
- 为什么theluckystiff 有一个 ruby 沙盒插件
- 我可以使用某种操作系统虚拟化软件(例如 vmware 或 Xen 等)在其自己的虚拟机中运行每个功能。
我想知道是否有人对以功能方式运行不受信任的 ruby 代码有任何建议?您会推荐什么选择?你会怎样做呢?谢谢。
$SAFE 还不够;你至少需要达到 Why's 怪异沙盒的水平。但是,我不知道沙箱代码是否得到积极维护,或者他/他们是否解决了诸如无限循环等漏洞。
不安全通常意味着敌对。如果您可以从敌对状态放松到“天真”状态,并且根据应用程序的要求,您可能会摆脱 Ruby 中的沙箱的困扰。这在语言设计上并不是真正一流的场景。
但即便如此,您可能也不需要进入机器级别的分离。我觉得在单独生成的进程中使用沙箱非常安全,您的应用程序充当进程管理器来杀死任何设法挂起/燃烧的进程。现在,这比上面的简单块要多几个数量级的工作。
但请记住并不断重复,“安全部门无法应对敌对行为”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)