ruby on rails - Ruby: creando una eval sandbox?
ruby-on-rails (4)
La aplicación My Rails tiene reglas complicadas sobre cuándo se debe mostrar un poco de contenido en una página o no. Decidí implementar esto escribiendo predicados (funciones simples ''sí / no'') en Ruby y almacenándolos en la base de datos para su posterior evaluación. Es bastante sencillo.
Mi principal preocupación es la seguridad: si alguien malintencionado se da cuenta de cómo escribir en la base de datos, podría colocar un código Ruby arbitrario en la base de datos y luego " toda su base nos pertenece ".
Entonces, ¿es posible crear una evaluación ''de espacio aislado'', por ejemplo, que haya eliminado todas las operaciones de IO?
Es posible que desee comprobar el método ''taint'' y cosas relacionadas. Esta es una buena referencia:
http://ruby-doc.com/docs/ProgrammingRuby/html/taint.html
A pesar de eso, no puedo recomendarle lo suficiente sobre el almacenamiento y la evaluación del código, es un riesgo de seguridad que debe evitarse y la mayoría de las veces hay una forma más sencilla de resolver sus problemas.
Si necesitas evaluar reglas complejas y predicados, recomendaría un motor de reglas para crear un DSL agradable. No he usado uno en rubí, pero este me parece bien:
http://treetop.rubyforge.org/index.html
Aclamaciones
Si desea eliminar algunos métodos de su objeto, puede verificar esto:
remove_method o undef_method
Suponiendo que esté al menos en ruby ββ1.8, puede ejecutar un proc en un nivel seguro diferente.
def my_unsafe_function
# possible unsafe stuff
end
proc {
$SAFE = 4 # change level only inside this proc
my_unsafe_function
}.call
Sin embargo, debe reconsiderar si realmente necesita almacenar código ruby ββen la base de datos. ¿Los usuarios de la aplicación van a modificar este código almacenado y por qué? Si no lo están, ¿por qué no poner el código en los archivos de la aplicación? No conozco su configuración, pero debería ser posible mover la lógica fuera de la base de datos.
puede hacerlo con una gema de sandboxing, https://github.com/tario/shikashi , que le permite agregar métodos a la lista blanca.
crédito a https://.com/a/8704768/188355