你如何使用ptrace沙箱在Rails中运行不受信任的代码?

Nox*_*Nox 16 ruby ptrace ruby-on-rails-4

让我们假设我有这个糟糕的控制器代码:

class MovesController < ApplicationController
  def create
    eval(params[:input])
  end
end
Run Code Online (Sandbox Code Playgroud)

我一直在寻找一种最好的方法来沙箱执行不受信任的代码一段时间了,偶然发现了这个ruby-lang功能的讨论:https://bugs.ruby-lang.org/issues/8468

这个问题的真正解决方案是在Ruby之上运行一个沙箱.我在基于ptrace的沙箱中的http://eval.in上运行不受信任的代码. 查理萨默维尔

关于该主题的进一步研究不仅仅是纯粹的ptrace文档.是否有已知的实践/库在Ruby和Rails中使用ptrace,还是需要建立自己的解决方案?

Bra*_*ncy 3

有一个名为“可信沙箱”的宝石可以做到这一点。但要小心,因为Docker实际上并不能防黑客。

还有CodePad使用的 Geordi

ruby 1.8 有一个(有缺陷的?)沙箱实现,但不再受支持。

但实际上,你的问题就像一个老笑话,病人说“医生,我这样做的时候很痛。” 医生回答说:“好吧,不要这样做。”

您可以做一百万件事:

  • 使用具有一流沙箱功能的语言(例如 Lua)。
  • 使用模板语言(例如 Liquid 或 Mustache)。为实际需要完成的事情编写自己的解析器。
  • 运行在客户端运行的“程序”(在 javascript 或hotruby中),并且仅将处理后的数据发送回您的服务器。