Pregunta

Estoy buscando para ejecutar algunos scripts ONU-verificado (basado en Java escritos en un lenguaje todavía-a-ser-determinado, pero tiene que ser, por lo JRuby, Groovy, Jython, BeanShell, etc, son todos los candidatos). Quiero que estos scripts para ser capaces de hacer algunas cosas y restringida de hacer otras cosas.

Normalmente, sólo iría utilizar SecurityManager de Java y puede hacer con ella. Eso es bastante simple y me permite restringir archivo y acceso a la red, la capacidad de apagar la máquina virtual Java, etc. Y eso va a funcionar bien para el alto nivel de las cosas que quiero bloquear.

Sin embargo, hay algunas cosas que quiero para permitir, pero sólo a través de mi costumbre API / biblioteca que he proporcionar. Por ejemplo, yo no quiero para permitir el acceso directo a la red para abrir un URLConnection a yahoo.com, pero estoy bien si se hace con MyURLConnection. Es decir -. Hay un conjunto de métodos / clases que quiero para permitir y luego todo lo demás quiero estar fuera de los límites

No creo que este tipo de seguridad se puede hacer con el modelo de seguridad estándar de Java, pero tal vez puedo. No tengo un requisito específico para el rendimiento o la flexibilidad en el propio lenguaje de scripts (guiones serán las llamadas de procedimiento simples a mi API con bucle básico / de ramificación). Por lo que incluso una sobrecarga "grande" que comprueba un control de seguridad en cada llamada reflexión está bien para mí.

Sugerencias?

¿Fue útil?

Solución

Renuncia: No soy un experto en API de seguridad de Java, lo que puede haber una mejor manera de hacer esto.

Yo trabajo para Alfresco , basada en Java Enterprise Open Source CMS, e implementamos algo similar a lo que describir. Queríamos para permitir secuencias de comandos, pero sólo para exponer un subconjunto de las API de Java para el motor de secuencias de comandos.

Elegimos Rhino motor de secuencias de comandos JavaScript. Le permite controlar qué API se expone a JavaScript, lo que nos permite elegir qué clases están disponibles y cuáles no lo son. Los gastos generales, de acuerdo con nuestros ingenieros, es del orden de 10% - no es tan malo.

Además de esto, y esto puede ser relevante para usted, así, en el lado de Java, utilizamos Acegi (ahora Spring Security), y el uso de AOP para dar el control a base de papel sobre el cual los métodos de un cierto usuario puede llamar. Eso funciona bastante bien para su autorización. Así pues, en efecto, un usuario que acceda a nuestra aplicación a través de JavaScript primera tiene una API restringido a su disposición en el primer lugar, y después de que la API se puede restringir aún más basado en la autorización. Lo que podría utilizar las técnicas de AOP para restringir aún más los métodos que se puede llamar, lo que permite exponer esto en otros lenguajes de script, como Groovy, etc. Estamos en el proceso de añadir esos también, tener la confianza de que nuestro Java subyacente API de proteger a los usuarios contra accesos no autorizados.

Otros consejos

Es posible que pueda usar un cargador de clases personalizado que hace veterinarios que unen a las clases antes de delegar a su padre.

Usted puede crear sus propios permisos, la verificación de los de sus API sensibles de seguridad y luego usar AccessController.doPrivileged para restaurar los privilegios apropiados, mientras que llamar a la API subyacente.

Es necesario asegurarse de que el motor de secuencias de comandos en sí es segura. La versión de Rhino en el JDK de Sun debería estar bien, pero no hay garantías. Obviamente se necesita para asegurarse de que todo esté disponible para el guión es seguro.

En Groovy, puede hacer exactamente lo que usted ha mencionado. Realmente muy fácil. Se puede limitar fácilmente los permisos de los scripts no son de confianza se ejecutan en un entorno de confianza, permitir el uso de su propia API, que a su vez puede hacer cosas que no se confía.

http://www.chrismoos.com / 2010/03/24 / Groovy-scripts-y-JVM seguridad /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top