我希望能够运行不受信任的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有一个用于红宝石的Sandbox插件
我可以使用某种os虚拟化软件(如vmware或Xen等)在自己的虚拟机中运行每个功能.
我想知道是否有人有任何建议以功能方式运行不受信任的ruby代码?你会推荐什么选择?你会怎么做?谢谢.
$ SAFE是不够的; 你需要至少达到为什么是怪异的沙盒.但是,我不知道沙盒代码是否得到了积极维护,或者他/他们是否解决了诸如无限循环等漏洞.
不安全通常意味着敌意.如果你可以放松地对待,比如说'天真',并且根据应用程序的要求,你可能会在Ruby中使用沙盒.它并不是语言设计中的第一类场景.
尽管如此,你可能不需要进入机器级别的分离.在单独生成的进程中使用沙盒时我感觉非常安全,您的应用程序可以充当进程管理器,以消除任何设置为挂起/火焰的任务.现在,这比上面的简单块多了几个数量级.
但请记住并不断重复,"安全无法应对敌意".