【发布时间】:2015-07-07 01:49:09
【问题描述】:
假设我有这个糟糕的控制器代码:
class MovesController < ApplicationController
def create
eval(params[:input])
end
end
一段时间以来,我一直在寻找一种对不受信任的代码执行沙箱的最佳方法,并偶然发现了这个 ruby-lang 功能的讨论:https://bugs.ruby-lang.org/issues/8468
这个问题的真正解决方案是在 Ruby 之上运行一个沙箱。我在基于 ptrace 的沙箱内的 http://eval.in 上运行不受信任的代码。 查理萨默维尔
对该主题的进一步研究仅获得纯粹的 ptrace 文档。是否有在 Ruby 和 Rails 中使用 ptrace 的已知实践/库,或者是否需要设置自己的解决方案?
【问题讨论】:
-
恐怕对这个过程的完整描述超出了我为 StackOverflow 总结的微薄能力。核心思想是您使用 ptrace(2) 来通知所有系统调用,并将您认为“安全”的那些显式列入白名单,并且对于参数可能使其不安全的任何系统调用,您验证参数。 a useful paper 关于使用跟踪机制的监禁进程。您可以寻找 sandbox 和 s4g 作为示例实现。
标签: ruby ruby-on-rails-4 ptrace