Estamos intentando proporcionar elementos de secuencias de comandos en un producto "enterprisy". Nos gustaría usar Groovy, pero estamos teniendo dificultades para asegurar cosas muy básicas.Groovy Script Security no confiable en Java
Por ejemplo, nos gustaría evitar que un cliente simplemente va
Class.forName("my.company.internal.SecruityTools").runAsAwesome(...)
Hemos instalado un controlador de seguridad con una política que sólo permite accesDeclaredMembers
y han sobrescrito el método checkPackageAccess
y sólo permitir que los paquetes de la lista blanca . Desafortunadamente, la cadena classLoader predeterminada parece omitir esto y cargar la clase de cualquier forma.
Parecería que este es un problema bastante común/discutido, pero no puedo encontrar una biblioteca o incluso una buena publicación de blog sobre cómo bloquear scripts no confiables en el contexto de una aplicación mucho mayor .
¿Alguien ha hecho esto con éxito? ¿Me faltan algunas publicaciones/conceptos bastante obvios? ¿Ya hay una biblioteca sólida para esto? ¿Tal vez Groovy.tinFoilHatMode(true)
?
Tal vez [esta respuesta en una pregunta similar] (http://stackoverflow.com/a/6490674/274466) es de alguna ayuda? La respuesta apunta a [esta publicación del blog] (http://www.jroller.com/melix/entry/customizing_groovy_compilation_process), que ofrece un mecanismo plausible para prevenir este tipo de cosas ... – ig0774
Si no me equivoco, hay bastantes características de lenguaje dinámico que podrían evitar cualquier tipo de protección AST. Algo así como object. ("Ge" + t "+" ClassLoader ")." Fo "+ $ rname o algo así. –
@Ambience ¿Has probado los procedimientos sugeridos por ig0774? No creo que puedas evadirlos con trucos como tú sugieres, y si puedes, esto es algo que debería informarse al equipo de Groovy lo antes posible. –