怎么在Web服务器上执行用户提供的Ruby代码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (15)

我想让我的用户创建Ruby脚本来对驻留在Web服务器上的一些数据进行计算,然后输出结果。脚本在服务器上执行。有什么办法可以安全地做到这一点?

更具体地说,我想:

  • 限制脚本可以使用的资源(内存和CPU),并限制其运行时间
  • 限制脚本可以使用哪些核心类(例如String,Fixnum,Float,Math等)
  • 让脚本访问并返回数据
  • 向用户输出错误
提问于
用户回答回答于

class BlankSlate

  instance_methods.each do |name|
    class_eval do
      unless name =~ /^__|^instance_eval$|^binding$|^object_id$/
        undef_method name
      end
    end
  end

end

评估其他代码的上下文对象:

  clean_room = BlankSlate.new
  command = gets
  command.untaint
  result = proc do
    $SAFE = 4
    clean_room.instance_eval do
      binding
    end.eval(command)
  end.call

输出结果:

  p result

扫码关注云+社区