我希望能够运行不受信任的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.
Run Code Online (Sandbox Code Playgroud)
只是为了澄清,我基本上使用不受信任的代码作为函数.我想提供一些输入,然后允许它写入输出.这就是我真正想要的,我不在乎它是如何完成的,我只是希望能够使用不受信任的Ruby代码作为一种功能.解决方案不必看起来像我上面写的代码,我只是用它来说明我想要的东西.
现在,我现在可以想到3种方法:
我想知道是否有人有任何建议以功能方式运行不受信任的ruby代码?你会推荐什么选择?你会怎么做?谢谢.
我们正在开发一种对Tropo有类似要求的产品(参见https://github.com/tropo/tropo-samples/tree/master/ruby),允许用户编写可以访问的ruby脚本传入的一些函数和变量.但是,我们希望避免用户访问全局调用,删除所有用户或终止程序.有没有办法用eval完成这个?
我正在为Rails项目实现一个插件架构.插件架构包括插件编写者编写要在服务器上执行的Ruby代码的能力.我想让这个安全,以便插件编写者无法编写破坏性代码.
我认为我需要做的是,虽然我对其他选项持开放态度,但是在一个范围有限的隔离环境中执行插件的Ruby代码.我正在考虑therubyracer gem 的精神,但我想安全地执行Ruby而不是JavaScript.
我无法想出一个很好的方法来做到这一点.我想过使用eval一个有限的bindings对象,但我认为eval几个文件很难,我认为我不能充分限制绑定.例如,我不希望插件能够destroy_all在模型上执行某些操作,或者在应用程序中修补现有代码.
我对这个很难过.有人有主意吗?