Я хочу иметь возможность запускать unstrusted ruby code. Я хочу иметь возможность передавать переменные в указанный ненадежный код, который он может использовать. Я также хочу, чтобы указанный код возвращал мне результат. Вот концептуальный пример того, что я думаю.
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
- Я могу запускать каждую функцию на своей собственной виртуальной машине, используя какое-то программное обеспечение для виртуализации os, такое как vmware или Xen или что-то в этом роде.
Мне интересно, есть ли у кого-нибудь рекомендации по запуску ненадежного кода ruby функциональным способом? Какой вариант вы бы рекомендовали? Как бы вы это сделали? Спасибо.