如何安全地让用户运行任意的Ruby代码?
问题描述:
我意识到这听起来有点疯狂,但我正在为一个项目工作,我需要一个服务器来运行用户提供的Ruby代码并返回结果。如何安全地让用户运行任意的Ruby代码?
我期待,以防止这样的事情:
system("rm -rf /")
eval("something_evil")
# etc...
我敢肯定,必须有一些合理的安全做到这一点的方式,因为它已经在像tryruby.org的地方存在。任何帮助非常感谢,谢谢!
答
三点建议:
1)看看红宝石taint levels。这提供了一定程度的打击,eval('evil_code')
类的东西保护等
2)除非用户的实际需要访问本地文件系统,使用类似fakefs
3)不管你做什么其他follow Tronic's suggestion(可是一个痛苦的设置,但有限的chroot*是确保用户无法访问你不明确希望他们访问的资源的唯一方法。)
答
以最少chroot的资源限制(内存使用情况等)作为用户/组nobody,以允许的syscalls白名单运行程序。
答
“空白石板”是剥离了其大部分方法的对象。 “洁净室”是您评估潜在不安全房间的对象。 如果您在“洁净室”中评估代码,该代码也是“空白石板”,将安全级别调高至最高,您将为自己提供很大的保护。没有什么安全是可以肯定的,所以这应该被视为你的安全层,不一定只是层。