Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何安全地让用户运行任意Ruby代码?_Ruby - Fatal编程技术网

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

如何安全地让用户运行任意Ruby代码?,ruby,Ruby,我意识到这听起来有点疯狂,但我正在做一个项目,我需要一个服务器来运行用户提供的Ruby代码并返回结果 我希望防止类似的事情: system("rm -rf /") eval("something_evil") # etc... 我相信一定有某种相当安全的方法可以做到这一点,因为它已经存在于tryruby.org这样的地方。非常感谢您的帮助,谢谢 以最少的chroot运行程序ptraced,其中包含一个允许的系统调用白名单,即用户/组nobody,并具有资源限制(内存使用等)。三个建议: 1)

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

我希望防止类似的事情:

system("rm -rf /")
eval("something_evil")
# etc...

我相信一定有某种相当安全的方法可以做到这一点,因为它已经存在于tryruby.org这样的地方。非常感谢您的帮助,谢谢

以最少的chroot运行程序ptraced,其中包含一个允许的系统调用白名单,即用户/组nobody,并具有资源限制(内存使用等)。

三个建议:

1) 看看Ruby。这提供了某种程度的保护,以防止,
eval('evil_code')
键入内容等

2) 除非用户实际需要访问本地文件系统,否则请使用

3) 不管你做什么(设置起来可能很痛苦,但有限的chroot监狱是绝对确保用户无法访问你不希望他们访问的资源的唯一方法)。

一块“空白板岩”是一个被剥夺了(大部分)方法的对象。 “洁净室”是您评估潜在不安全房间的对象。 如果您在一个“干净的房间”中评估代码,这也是一块“空白板”,将安全级别提高到最高,您将为自己提供大量的保护。安全性中没有任何东西是确定的,因此这应该被视为安全性中的一个层,而不一定是唯一的层


.

我也遇到了同样的问题,但后来我发现并决定为它编写一个API包装,名为。这很容易:

sandie = Sandie.new(language: 'ruby')
# => #<Sandie:0x00000002e30650>
sandie.evaluate(code: 'puts "hello world"')
# => {"stdout"=>"hello world\n", "stderr"=>"", "wallTime"=>487, "exitCode"=>0}
sandie=sandie.new(语言:“ruby”)
# => #
评估(代码:'puts'hello world')
#=>{“stdout”=>“hello world\n”、“stderr”=>”、“wallTime”=>487、“exitCode”=>0}
它还支持大量其他语言,如C#、Perl、Lua和Java