5

我正在为 Rails 项目实施插件架构。插件架构包括插件编写者编写要在服务器上执行的 Ruby 代码的能力。我想让这个安全,这样插件作者就没有能力编写破坏性的代码。

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

我想不出一个好的方法来做到这一点。我曾想过使用eval有限的bindings对象,但我认为eval多个文件会很困难,而且我认为我不能充分限制绑定。例如,我不希望插件能够destroy_all在模型上执行类似 a 的操作,或者对应用程序中的现有代码进行猴子补丁。

我对这个很困惑。有人有想法么?

4

1 回答 1

1

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

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

于 2012-08-27T20:40:24.393 回答