我意识到这听起来有点疯狂,但我正在开发一个项目,我需要一个服务器来运行用户提供的Ruby代码并返回结果。
我希望阻止这样的事情:
system("rm -rf /")
eval("something_evil")
# etc...
我确信必须有一些合理安全的方法,因为它已经存在于tryruby.org这样的地方。非常感谢任何帮助,谢谢!
答案 0 :(得分:6)
三点建议:
1)看一下Ruby taint levels。这为eval('evil_code')
类型的东西等提供了一定程度的保护。
2)除非用户实际需要访问本地文件系统,否则请使用fakefs
之类的内容3)无论你做什么follow Tronic's suggestion(设置起来都很痛苦,但有限的chroot jails是确保用户无法访问你没有明确要求的资源的唯一方法)。
答案 1 :(得分:3)
使用允许系统调用的白名单运行程序ptraced,作为用户/组nobody,具有资源限制(内存使用等),在最小的chroot中。
答案 2 :(得分:2)
“空白石板”是剥离(大部分)其方法的对象。 “洁净室”是您评估潜在不安全房间的对象。 如果您在“洁净室”中评估代码,这也是一个“空白板”,将安全级别提升到最高水平,您将获得大量保护。安全性无关紧要,因此这应该被视为安全层中的一层,而不一定是唯一的层。
答案 3 :(得分:0)