Post on 08-Jul-2015
description
Seguridad en Aplicaciones Web con Spring Security 3 [Taller]
Fernando Redondo Ramírez
@pronoide_fer
Índice
• ¿Quién soy?
• Breve Introducción a Spring Security 3
• ¡Manos a la obra!
• Más allá del taller
• Enlaces
• Preguntas
¿Quién soy?
• Emprendedor y empresario en Pronoidedesde 2003
• Formador Java & Friends
• Haciendo cosas con Java desde 1999
• Ingeniero técnico informático
• Casado y padre de dos hijos (la segunda hija podría estar naciendo ahora… ¡uff!)
Breve Introducción a Spring Security 3
• ¿La seguridad JEE no es estándar? Sí, pero:
1. Seguridad JEE ⇒ Basada en restricciones (Constraints)
2. Seguridad JEE ⇒ Exclusivamente perimetral
3. Seguridad JEE ⇒ Funcionalidades dependientes de cada Servidor de Aplicaciones (Realms, SSO, Cifrado, etc.)
4. Seguridad JEE ⇒ Aplicaciones JEE no transportables entre plataformas o versiones del mismo servidor
5. Seguridad JEE ⇒ Difícil de adaptar a para aplicaciones Web 2.0 y/o nuevos requerimientos
Breve Introducción a Spring Security 3
• ¿La seguridad JEE no es estándar? Sí, pero:
1. Spring Security ⇒ Basada en otorgar permisos
2. Spring Security ⇒ Perimetral y jerárquica
3. Spring Security ⇒ Funcionalidades independientes del Servidor de Aplicaciones
4. Spring Security ⇒ Aplicaciones JEE transportables
5. Spring Security ⇒ Versátil y adaptable
Breve Introducción a Spring Security 3
Arquitectura (¡y se acabó!)
Seguridad Aplicaciones Spring Security 3
SecurityContextHolderSecurityContextAuthentication
GrantedAuthority
Peticiones Web
Web/HTTP Security
Cadena de filtros de seguridad
Autentificación
AuthenticationManager
AuthenticationProviders
UserDetailsService
Autorización
AccessDecisionManager
Voters
AfterInvocationManager
Métodos Negocio
Business Object (Method) Security
Proxies/Interceptores de seguridad
¡Manos a la obra!
Notas
1. Descargar http://pronoide.com/descargas/fbi.war2. Importar war en STS 2.83. Ejecutar la aplicación4. Entrar en http://localhost:8080/fbi/index.jsp
¡¡Necesito seguridad
en la aplicación de
los Expedientes X!!
Etapa: Configurar Spring Security en la aplicación web
i. Configurar el filtro interceptor de las peticiones web
Etapa: Configurar Spring Security en la aplicación web
ii. Crear el fichero para la configuración de seguridad
con una seguridad mínima y cargarlo en el web.xml
Etapa: Configurar Spring Security en la aplicación web
iii. Configurar el login/logout explícitamente
iv. Solucionar problemas de recursos, CSS e imágenes
Etapa: Configurar Spring Security en la aplicación web
v. Proteger contraseñas de los usuarios encriptándolas
• Generar claves con Spring Basic Crypto Module
• Poner las claves cifradas y configurar el algoritmo y el salt
Etapa: Configurar Spring Security en la aplicación web
vi. Añadir funcionalidad “Remember Me”
Etapa: Configurar Spring Security en la aplicación web
vii. Seguridad en el canal de transporte (HTTPS)
• Configurar restricciones y puertos
• Crear conector SSL en Servidor
Etapa: Configurar Spring Security en la aplicación web
viii. Control de la expiración de sesiones
ix. Control de la concurrencia de sesiones
Etapa: Configurar Spring Security en la aplicación web
x. Uso de la librería de etiquetas (Spring Security Taglibs)
Etapa: Configurar Spring Security en la aplicación web
xi. Uso Expresiones SpEL para proteger URL’s
xii. Uso Expresiones SpEL con etiquetas Security Taglib
¡Pero que has hecho!
¿¿Sólo hay seguridad
en el acceso a los
recursos web??
Prueba y verás:
/clasificar?id=1
Prueba y verás:
https://localhost:8443/fbi/expedientesx
/clasificar?id=1
Etapa: Configurar Spring Security en Servicios de Negocio
xiii. Seguridad en la invocación de métodos de negocio
con anotaciones Spring Security
Etapa: Configurar Spring Security en Servicios de Negocio
xiv. Seguridad en la invocación de métodos de negocio
con anotaciones JSR-250
Etapa: Configurar Spring Security en Servicios de Negocio
xv. Seguridad en la invocación de métodos de negocio
con Pointcuts de AspectJ
Etapa: Configurar Spring Security en Servicios de Negocio
xvi. Seguridad en la invocación de métodos de negocio
con Expresiones SpEL (Preinvocación)
Mucho mejor pero…
¿¿Qué haces consultando
expedientes que no son tuyos??
¿¿Cómo es que puedes ver el de
tu hermana??
¿¿… y a estas horas??
Etapa: Configurar Spring Security de forma jerárquica
xvii.Seguridad en la invocación de métodos de negocio
con Expresiones SpEL (Postinvocación)
Etapa: Configurar Spring Security de forma jerárquica
xviii.Seguridad en la invocación de métodos de negocio
con Expresiones SpEL (Filtro de resultados)
Etapa: Configurar Spring Security de forma jerárquica
xix. Utilización del sistema de votantes
• Codificar un votante
Etapa: Configurar Spring Security de forma jerárquica
xix. Utilización del sistema de votantes (cont.)
• Explicitar la configuración del espacio de nombres Security
• Personalizar la configuración del accessDecisionManager
Etapa: Configurar Spring Security de forma jerárquica
xx. Personalizar la cadena de filtros de seguridad
• Crear un filtro para recordar el usuario que hace login
Etapa: Configurar Spring Security de forma jerárquica
xx. Personalizar la cadena de filtros de seguridad (cont.)
• Crear un filtro para evitar el uso del botón “volver” tras
hacer logout
The Smoking Man
Todo esto de Spring Security
esta muy bien, pero siempre
me quedará el ataque Java2
<%System.exit(0);%>
Más allá del taller. A partir de aquí…
• Configuraciones explícitas no implícitas
• Gestión de ACL’s
• Autentificación vía DataSources, LDAP, X509, OPENID, JEE, etc
• Captcha
• Single Sign On
• Secure Remoting
• “... en la mayoría de mi trabajo, las leyes de la física rara vez se aplican.” Mulder 1x01 "Pilot"
¿preguntas?
The Truth is Out There
(La Verdad está ahí afuera)
Referencias
• Spring Security 3.1 Referencehttp://bit.ly/uQFyUY
• JSR-250 Annotationshttp://en.wikipedia.org/wiki/JSR_250
• Spring SpELhttp://bit.ly/xIuueQ
• Spring Security Common Built-In Expressionshttp://bit.ly/worFP0
• Spring Security Adding Custom filtershttp://bit.ly/z2vQWQ
• Constantes Spring Securityhttp://bit.ly/yszYqm
• Clasificación de la información por paíseshttp://bit.ly/zLCoNT
¡Gracias!
• @pronoide_fer
• fredondo@pronoide.com
• http://pronoide.com
• http://blog.pronoide.es