Как вы используете ptrace для песочницы в Rails недоверенный код?

Предположим, что у меня есть этот ужасный код контроллера:

class MovesController < ApplicationController
  def create
    eval(params[:input])
  end
end

Я искал лучший способ изолировать выполнение ненадежного кода в течение некоторого времени и наткнулся на обсуждение этой функции ruby-lang: https://bugs.ruby-lang.org/issues/8468

Реальное решение этой проблемы - запустить песочницу на уровне выше Ruby. Я запускаю ненадежный код на http://eval.in внутри песочницы, основанной на ptrace. Чарли Сомервилл

Дальнейшие исследования по этому вопросу не получили больше, чем чистая документация ptrace. Существует ли известная практика/библиотека для использования ptrace в Ruby и Rails или вам нужно настроить собственное решение?

Ответы

Ответ 1

Для этого есть драгоценный камень, называемый trusted-sandbox. Но будьте осторожны, потому что Docker на самом деле не является хакерским.

Существует также Geordi, используемый CodePad.

Была реализована песочница (для багги?) для ruby ​​1.8, но она больше не поддерживается.

Но на самом деле, ваш вопрос похож на старую шутку, когда пациент говорит: "Доктор, мне больно, когда я это делаю". И Доктор отвечает "хорошо, не делай этого".

Есть миллион вещей, которые вы могли бы сделать вместо этого:

  • Используйте langauge с первоклассной песочницей (например, Lua).
  • Используйте язык шаблонов (например, Liquid или Mustache). Напишите свой собственный парсер для того, что действительно нужно сделать.
  • Запустите прогон программы на стороне клиента (в javascript или hotruby) и только отправьте обработанные данные обратно на ваш сервер.