Я хочу иметь возможность запуска ненадежного рубинового кода. Я хочу иметь возможность передавать переменные в указанный недоверенный код, который он может использовать. Я также хочу, чтобы указанный код возвращал мне результат. Вот концептуальный пример того, что я думаю
input = "sweet"
output = nil
Thread.start {
$SAFE = 4
#... untrusted code goes here, it uses the input variable(s)
#to calculate some result that it places in the output variable
}
#parse the output variable as a string.
Просто чтобы уточнить, я в основном использую ненадежный код в качестве функции. я бы хотел
предоставить некоторые входные данные, а затем разрешить запись в выходной. Это все, чего я действительно хочу, мне все равно, как это делается, я просто хочу использовать ненадежный код Ruby в качестве функции. Решение не должно выглядеть как код, который я написал выше, я просто использую его, чтобы проиллюстрировать, что я хочу.
Теперь я могу придумать 3 способа сделать это:
- Используйте приведенную выше конструкцию уровня $ SAFE.
- whytheluckystiff имеет плагин Sandbox для ruby
- Я мог бы запускать каждую функцию на своей виртуальной машине, используя какое-то программное обеспечение для виртуализации ОС, такое как vmware или Xen или что-то подобное.
Мне интересно, есть ли у кого-нибудь рекомендации по функциональному запуску ненадежного кода ruby? Какой вариант вы бы порекомендовали? Как бы вы пошли об этом? Спасибо.