当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在安全的沙箱中运行不受信任的Ruby代码?》经验,为你挑选了1个好方法。

我希望能够运行不受信任的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代码?你会推荐什么选择?你会怎么做?谢谢.



1> James Baker..:

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

不安全通常意味着敌意.如果你可以放松地对待,比如说'天真',并且根据应用程序的要求,你可能会在Ruby中使用沙盒.它并不是语言设计中的第一类场景.

尽管如此,你可能不需要进入机器级别的分离.在单独生成的进程中使用沙盒时我感觉非常安全,您的应用程序可以充当进程管理器,以消除任何设置为挂起/火焰的任务.现在,这比上面的简单块多了几个数量级.

但请记住并不断重复,"安全无法应对敌意".


有没有人有任何参考资料解释$ SAFE有什么问题?
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有