¿Es posible limitar los comandos JRuby permitidos en una aplicación Java?

Uso JRuby en mi aplicación Java para permitir a los usuarios ejecutar sus scripts. El conjunto de operaciones necesarias para el funcionamiento normal de la aplicación no es grande. El script debe controlar algunas variables en el código Java y cambiar el proceso durante la ejecución.

Por eso quiero tener la oportunidad de limitar el número de operaciones permitidas. Digamos, no quiero que los usuarios tengan acceso al sistema de archivos.

f = File.new("myfile.txt", "w") 
f.puts( "Hello!" ) 
f.close

Esto debería estar prohibido.

¿Cómo puedo hacer tal configuración? La única idea que tengo es analizar el script de usuario antes del lanzamiento y comparar el script con la lista blanca de operaciones permitidas.

Respuesta 1

Lo que debe hacer es crear una lista blanca de comandos permitidos. Si se encuentra que un script contiene un comando que no está en la lista blanca, debe rechazar todo el script. Un administrador de seguridad, como señala Andrew Thompson, es una buena capa adicional, pero no es el final de la capa de seguridad. No creo que correr en un applet de espacio aislado realmente te vaya a comprar tanto, ya que todavía tienes que determinar si el script era válido para empezar.

EJEMPLO DE LISTA BLANCA

Por lo general, cuando genera una lista blanca, hay un número limitado de opciones / comandos que desea que los usuarios puedan elegir y el resto se descarta. crearía una estructura de enumeración o datos finales (para minimizar su capacidad de ser modificada durante el tiempo de ejecución por programas maliciosos). Si desea que los usuarios solo tengan la opción de invocar su función fooy no bar, podría escribir algo como esto, que es completamente primitivo pero ilustra el concepto:

class WhiteList  
{  
     allowedCommands = ["foo"];  
}  

y en su principal algo como esto:

class Main  
{  
     for(Command command in userInput)  
     { 
           if(command not in allowedCommands)  
           {  
                log security message;  
                continue/break
           }  
     }  
}  
Respuesta: 2

Así que aquí está la cita del libro: el método de anulación NO debe arrojar excepciones marcadas que sean nuevas o más amplias que las declaradas por el método anulado. Por ejemplo, un método que declara ...

Tengo cuatro consumidores actuales que escuchan la misma cola en Amazon AWS. Al extraer el mensaje de la cola, parece que a veces dos consumidores diferentes consumen el mismo mensaje. Por favor ...

¿Cómo puedo invocar un método privado usando manejadores de métodos? Hasta donde puedo ver, solo hay dos tipos de instancias de búsqueda de acceso público: MethodHandles.lookup () MethodHandles.publicLookup () y ...

Acabo de encontrarme con este tipo de situación mientras desarrollaba una aplicación de Android hoy en la que se me exigía que representara gráficos basados ​​en las respuestas de 2 API diferentes. Estoy usando Volley y lo que yo ...