2011-06-02 14 views
12

Estoy trabajando en una aplicación de servidor que se puede ampliar mediante scripts de Groovy proporcionados por el usuario. Es evidente que quiero asegurarme de que estos scripts se ejecuten en un entorno limitado muy estrecho en el que no puedan interrumpir el código de la aplicación central ni consumir demasiados recursos para sobrecargar el servidor.Incrustación de scripts groovy a prueba de balas

he estudiado varias posibilidades y la solución final puede ser una combinación de éstos:

  • Ejecutar la secuencia de comandos dentro de un gestor de seguridad muy restringido. El script se ejecuta dentro de un permiso SecurityManager. Se deben declarar permisos adicionales (como Android).

  • Inicie una nueva JVM. Cree un contenedor ScriptProcess alrededor de Runtime.exec y genere una nueva JVM con un administrador de seguridad, un montón limitado, etc. Debido a que lanzamos un proceso en toda regla, podríamos tener más control sobre los malos comportamientos del monitor. Sin embargo, el costo en recursos sería grave ... Una alternativa sería usar Ant aquí, pero ¿sería escalable?

  • Java Monitor API En Java 6 hay un paquete con capacidad de supervisión. Podríamos supervisar los hilos y quizás detectar bucles infinitos y el consumo de memoria. Alguien usó esto?

Esto es lo que tengo en mente hoy. ¿Cuál sería la mejor manera de asegurarse de que estos scripts se comporten correctamente y aún así mantener una cierta escalabilidad y rendimiento?

Respuesta

8

Una posibilidad adicional es utilizar los personalizadores de compilación Groovy 1.8 en GroovyShell que ejecuta los scripts incrustados. Puede pre importar clases y métodos, restringir el uso de Groovy AST y preaplicar una transformación AST, como @ThreadInterrupt, @TimedInterrupt o @ConditionalInterrupt. Detalles en:

http://www.jroller.com/melix/entry/customizing_groovy_compilation_process

+0

Sí, creo que este es el camino a seguir. Echaré un vistazo a los personalizadores y transformadores incorporados. Si alguien tiene pre-construidos bucles infinitos apretados y limitadores de consumo de memoria que serían increíbles. –

2

usted debe tener un vistazo al proyecto de groovy-sandbox Kohsuke. También eche un vistazo al his blog post here sobre este tema y lo que está solucionando la solución es el espacio aislado, pero el inconveniente de rendimiento.

Cuestiones relacionadas