在有限的环境中执行ruby代码

ale*_*rd1 5 ruby plugins ruby-on-rails

我正在为Rails项目实现一个插件架构.插件架构包括插件编写者编写要在服务器上执行的Ruby代码的能力.我想让这个安全,以便插件编写者无法编写破坏性代码.

我认为我需要做的是,虽然我对其他选项持开放态度,但是在一个范围有限的隔离环境中执行插件的Ruby代码.我正在考虑therubyracer gem 的精神,但我想安全地执行Ruby而不是JavaScript.

我无法想出一个很好的方法来做到这一点.我想过使用eval一个有限的bindings对象,但我认为eval几个文件很难,我认为我不能充分限制绑定.例如,我不希望插件能够destroy_all在模型上执行某些操作,或者在应用程序中修补现有代码.

我对这个很难过.有人有主意吗?

Nuc*_*ucc 1

我建议您阅读以下有关 ruby​​ 安全级别的文档。有时,服务对未知用户嵌入的脚本使用级别 4:

http://ruby-doc.org/docs/ProgrammingRuby/html/taint.html