Quiero poder ejecutar el código ruby no confiable. Quiero poder pasar variables a dicho código no confiable que pueda usar. También quiero que dicho código me devuelva un resultado. Aquí está un ejemplo conceptual de lo que estoy pensando¿Cómo ejecutar el código de Ruby que no es de confianza dentro de un entorno seguro?
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.
Solo para aclarar, básicamente estoy usando el código no confiable como una función. Quiero proporcionar algunas entradas, y luego permitir que escriba en la salida. Eso es todo lo que realmente quiero, no me importa cómo se hace, solo quiero la capacidad de usar código Ruby no confiable como una especie de función. La solución no tiene que parecerse en nada al código que escribí arriba, solo lo estoy usando para ilustrar lo que quiero.
Ahora bien, actualmente se puede pensar en 3 maneras de hacer esto:
- utilizar el nivel seguro $ constructo anterior.
- whytheluckystiff tiene un complemento de Sandbox para ruby
- Podría ejecutar cada función en su propia máquina virtual, utilizando algún tipo de software de virtualización de os como vmware o Xen o algo así.
Me pregunto si alguien tiene alguna recomendación para ejecutar el código ruby no confiable de una manera funcional? ¿Qué opción recomendarías? ¿Cómo lo harías? Gracias.
¿Alguien tiene alguna referencia que explique qué le pasa a $ SAFE? – sheldonh