我正在为 Rails 项目实施插件架构。插件架构包括插件编写者编写要在服务器上执行的 Ruby 代码的能力。我想让这个安全,这样插件作者就没有能力编写破坏性的代码。
尽管我对其他选项持开放态度,但我认为我需要做的是在范围有限的隔离环境中执行插件的 Ruby 代码。我正在考虑一些具有therubyracer gem 精神的东西,但我想安全地执行 Ruby 而不是 JavaScript。
我想不出一个好的方法来做到这一点。我曾想过使用eval
有限的bindings
对象,但我认为eval
多个文件会很困难,而且我认为我不能充分限制绑定。例如,我不希望插件能够destroy_all
在模型上执行类似 a 的操作,或者对应用程序中的现有代码进行猴子补丁。
我对这个很困惑。有人有想法么?