2009-08-25 25 views
7

¿Es suficiente asegurar una aplicación web Java con los derechos del usuario que ejecuta el proceso del servidor de aplicaciones o también es razonable usar SecurityManager con un archivo de política adecuado?¿Debo usar Security Manager en aplicaciones web Java?

He utilizado lo primero y no lo último, pero algunos clientes quisieran que usáramos también SecurityManager que explícitamente otorgara permisos a cada componente de terceros para asegurarnos de que no haya ningún código maligno al acecho.

He visto algunos contenedores Servlet, como Resin para proponer que no se use SecurityManager para desacelerar. ¿Alguna idea?

Respuesta

9

Aunque odio recomendar alguna vez no usando una característica de seguridad, es mi opinión que un SecurityManager tiene más la intención de administrar situaciones en las que se está ejecutando código no confiable o de terceros en la JVM. Piense en los applets o en un escenario alojado y compartido de servidor de aplicaciones. Si tiene control total sobre el servidor de la aplicación y no está ejecutando el código de nadie más, creo que es redundante. Habilitar SecurityManager tiene un impacto significativo en el rendimiento en mi experiencia.

+0

En nuestro caso, el código de la tercera parte son varias bibliotecas de SO conocidas. Revisar cada línea de código es una tarea ardua para verificar si hay algún código "malo" potencial. Confío en estas bibliotecas, pero nuestro cliente es un poco paranoico :) – Kaitsu

+0

Debe tener cuidado antes de decir que no está ejecutando el código de otra persona. Por ejemplo, los ataques de XML External Entity (XEE) se pueden usar si se analiza XML, pero la mayoría de la gente diría que se trata de "solo datos". – bgiles

1

No hay una respuesta simple de "sí o no" a su pregunta, porque realmente depende: ¿qué quiere asegurar y de qué quiere protegerlo?

Por ejemplo, he utilizado SecurityManager para implementar el filtrado de IP y permitir que solo las direcciones IP de la lista blanca se conecten a mi aplicación. Si solo desea deshabilitar el acceso a los archivos del disco, quizás la mejor solución sea ejecutar la aplicación como usuario con menos privilegios.

Si no confía en complementos de terceros, recuerde que una vez que permite la ejecución del código del complemento, ese complemento puede bloquear su aplicación si lo desea incluso si usa SecurityManager. Si su aplicación carga complementos, tal vez el plugin de lista blanca y la lista de verificación antes de cargar el plugin sea una mejor solución.

Si decide usarlo, recibirá un golpe de rendimiento (ya que JVM hará más comprobaciones), pero la rapidez con la que se ejecutará realmente depende de su código/configuración que hará las comprobaciones. Mi lista blanca de IP era bastante rápida ya que incluía solo la búsqueda de una sola lista; si sus cheques incluyen la invocación de un servicio web remoto y el acceso a la base de datos puede ralentizar mucho las cosas, pero por otro lado, incluso eso no debería importar si tiene suficiente hardware y pocos usuarios concurrentes (en otras palabras, si puede pagarlo) .

1

La configuración correcta de Security Manager en java puede ser difícil. Por ejemplo, si no restringe el administrador de seguridad en sí mismo, puede omitir toda la seguridad simplemente configurando Security Manager en nulo.

uso de un administrador de seguridad sólo tiene sentido si su JVM se ejecutará que no se confía código, de lo contrario, es un dolor de configurar, ya que tendrá que saber de antemano qué permisos se deben establecer para cada función (por ejemplo: RMI , sockets, I/O) y para cada cliente.

Cuestiones relacionadas