如何安全地让用户运行任意Ruby代码?

igu*_*222 8 ruby

我意识到这听起来有点疯狂,但我正在研究一个项目,我需要一个服务器来运行用户提供的Ruby代码并返回结果.

我想阻止这样的事情:

system("rm -rf /")
eval("something_evil")
# etc...
Run Code Online (Sandbox Code Playgroud)

我确信必须有一些合理安全的方法,因为它已经存在于tryruby.org这样的地方.非常感谢任何帮助,谢谢!

ig0*_*774 6

三点建议:

1)看看Ruby 污点水平.这提供了一定程度的保护,eval('evil_code')类型的东西等.

2)除非用户实际需要访问本地文件系统,否则请使用类似fakefs的内容

3)无论你做了什么,都遵循Tronic的建议(可能很难设置,但有限的chroot jails是确保用户无法访问你没有明确要求的资源的唯一方法).