我正在为Rails项目实现插件架构。插件体系结构包括插件编写者编写要在服务器上执行的Ruby代码的能力。我希望使其安全,以便插件编写者无法编写破坏性代码。
我认为我需要做的是,虽然我对其他选项持开放态度,但是在一个范围有限的隔离环境中执行插件的Ruby代码。我正在考虑therubyracer gem的精神,但我想安全地执行Ruby而不是JavaScript。
我无法找到一个很好的方法来做到这一点。我想过将eval
与有限的bindings
对象一起使用,但我认为eval
几个文件很难,我认为我不能充分限制绑定。例如,我不希望插件能够在模型上执行类似destroy_all
的操作,或者在应用程序中修补现有代码。
我对这个很难过。有人有什么想法吗?
答案 0 :(得分:1)
我建议你阅读以下关于ruby安全级别的文档。有时,服务使用级别4来处理未知用户嵌入的脚本: