Seguridad de las aplicaciones web con Spring Security 3.x
-
Upload
fernando-redondo-ramirez -
Category
Technology
-
view
1.099 -
download
14
description
Transcript of Seguridad de las aplicaciones web con Spring Security 3.x
MADRID · NOV 21-22 · 2014
Seguridad de las aplicaciones web con Spring Security 3.x
Fernando Redondo Ramírez
@pronoide_fer
MADRID · NOV 21-22 · 2014
Roadmap
• ¿Quien soy?
• Una pequeña
introducción a Spring
Security
• Manos a la obra
• Más allá…
MADRID · NOV 21-22 · 2014
Whoami• Emprendedor y gestor de pronoide desde 2003
• Formador Java & Friends (Java EE, Spring, Groovy, Maven,
Jenkins, Sonar, Weblogic, Jboss, Websphere, Discotecas y demás )
• Haciendo cosas con Java desde 1999
• Ingeniero Informático
• Felizmente casado y padre de dos hijos ;)
• Quise ser físico después de ser informático y me
encantaban la serie de expedientes X
MADRID · NOV 21-22 · 2014
Breve Introducción a Spring Security
• ¿No es la seguridad una característica estándar de Java EE? Si, por supuesto. Pero:
• La seguridad Java EE ⇒ Esta basada en restricciones
• La seguridad Java EE ⇒ Solo define un perímetro de seguridad
• La seguridad Java EE ⇒ sus características dependen en última instancia de cada Servidor de Aplicaciones Server (Reinos, SSO, Cifrado, etc)
• La seguridad Java EE ⇒ Las aplicaciones securizadas con Java EE no se pueden transportar fácilmente entre plataformas diferentes o versiones distintas de un servidor
• La seguridad Java EE ⇒ Difícil de adaptar a Web 2.0 o a requerimientos cambiantes
MADRID · NOV 21-22 · 2014
• ¿Por qué utilizar Spring Security?
Porque:
• Spring Security ⇒ Basado en conceder permisos
• Spring Security ⇒ Seguridad tanto perimetral
como jerárquica
• Spring Security ⇒ Las características son
independientes del servidor de aplicaciones
• Spring Security ⇒ Aplicaciones Java EE seguras y
transportables
• Spring Security ⇒ Adaptabilidad and versatilidad
Breve Introducción a Spring Security
MADRID · NOV 21-22 · 2014
Breve Introducción a Spring Security
• ¡Arquitectura y se acabó!
Spring Security 3Clases y estructuras
SecurityContextHolderSecurityContextAuthentication
GrantedAuthority
Peticiones Web
Seguridad Web/HTTP
Cadena de filtros de seguridad
Autentificación
AuthenticationManager
AuthenticationProviders
UserDetailsService
Autorización
AccessDecisionManager
Voters
AfterInvocationManager
Métodos de Negocio
Seguridad en invocación de los métodos de los Objetos de Negocio
Proxies/Interceptores de Securidad
MADRID · NOV 21-22 · 2014
Tu próxima misión
¡Necesito seguridad en
la aplicación de los
Expedientes X!
MADRID · NOV 21-22 · 2014
¡Manos a la obra! (Más tarde en casa)
Antes de empezar, hay que…
1. Instalar git en tu equipo http://git-scm.com/book/en/Getting-Started-Installing-Git
2. Descargar Spring Tool Suite 3.5/3.6 https://spring.io/tools/sts/all
3. Arrancar Spring Tool Suite (STS) y elegir o crear
un workspace (recordar ejecutarlo con un JDK)
4. Descargar http://pronoide.com/downloads/codemotion2014-spring-
security-xfiles.zip y descomprimirlo en la carpeta del
workspace.
5. ¡Ve a tu ritmo! Es bastante fácil…
MADRID · NOV 21-22 · 2014
La webapp de los Expedientes X
Importar la webapp (File/Import/Git/Proyect from Git)
MADRID · NOV 21-22 · 2014
La webapp de los Expedientes X¡Ejecutarla!
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
i. Configurar un filtro interceptor para todas las peticiones web
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
ii. Crear un nuevo fichero de configuración de Spring beans
con una configuración mínima inicial y cargar vía web.xml
context parameter
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
iii. Configurar explícitamente los mecanismos de login / logout
iv. Arreglar problemas con recursos, imagenes y ficheros CSS
MADRID · NOV 21-22 · 2014
La webapp de los Expedientes X
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
v. Encriptar las claves de los usuarios vía Spring Security Crypto
Module
• Cifrar claves
• Configurar el algoritmo y el campo de salt. Luego usar dichas
claves en el fichero de configuración de seguridad
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
vi. Añadir la característica Remember Me al proceso de login
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
vii. Asegurar el canal de transporte (HTTPS)
• Establecer restricciones y puertos
• Configurar servidor tomcat (crear el connector SSL )
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
viii. Gestionar la expiración de sesiones
ix. Manejar la concurrencia de sessiones
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
x. Usar la librería de etiquetas de JSP (Spring Security Taglibs)
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
xi. Uso de SpEL para proteger URLs (Spring Expression
Language)
xii. Uso de SpEL con las etiquetas de Spring Security
MADRID · NOV 21-22 · 2014
¡Pero que has hecho!
¿Sólo hay seguridad en el
acceso a los recursos
Web? ¿Eso es lo mejor
que lo puedes hacer?
Prueba esta URL y observa lo que ocurre:
https://localhost:8443/fbi/xfiles/declassify?id=0
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en los métodos de negocio
xii. Asegurar las invocaciones a los métodos de negocio
mediantes las Anotaciones de Spring Security
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en los métodos de negocio
xiii. Asegurar las invocaciones de métodos con AspectJ pointcuts
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en los métodos de negocio
xiv. Asegurar las invocaciones de métodos con SpEL (Preinvocación)
MADRID · NOV 21-22 · 2014
¡Mucho mejor! Pero…
¿Qué haces viendo expedientes que
no son tuyos?
¿Por qué eres capaz de acceder al
expediente de tu hermana?
¿Y por qué accedes a ciertas horas
de la noche?
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security de forma jerárquica
xiv. Asegurar las invocaciones de métodos con SpEL (Postinvocación)
xiv. Asegurar las invocaciones de métodos con SpEL (Filtrar resultados)
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security de forma jerárquica
xvii. Personalización de los votantes de acceso
• Codificar un nuevo votante
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security de forma jerárquica
xviii.Personalización de los votantes de acceso (continuación)
• Descartar la configuración automática de Spring Security y mostrar la real
• Personalizar el comportamiento del Access Decision Manager
MADRID · NOV 21-22 · 2014
Etapa: Spring Security Bola Extra 1
xix. Personalización de la cadena de filtros de seguridad (Ejemplo A)
• Crear un filtro personalizado
• Colocarlo en la cadena de filtros
MADRID · NOV 21-22 · 2014
Etapa: Spring Security Bola Extra 2
xix. Personalización de la cadena de filtros de seguridad (Ejemplo B)
• Crear un filtro personalizado
• Colocarlo en la cadena de filtros
MADRID · NOV 21-22 · 2014
El Fumador (The smoking man)
Todas estas características de
Spring Security están bastante
bien, pero siempre me quedará
usar el ataque Java2:
<%System.exit(0);%>
MADRID · NOV 21-22 · 2014
Más allá…
• Configuraciones explicitas y no implicitas
• Gestión de ACL’s
• Autentificación con DataSources, LDAP, X509, OPENID, Java EE, etc
• Captchas
• Single Sign On
• Java Config
“… in most of my work, the laws of physics rarely seems to apply.”
Fox Mulder 1x01 "Pilot"
MADRID · NOV 21-22 · 2014
¡Gracias!@pronoide_fer
https://github.com/fredondo/
http://pronoide.es
MADRID · NOV 21-22 · 2014
Apendice: ¡Manos a la obra(en casa)! Navegar a través del código del proyecto con git_presenter
1. Instalar jruby o rubyhttp://jruby.org/getting-startedhttps://www.ruby-lang.org/en/installation/
2. Instalar git presenter (gem install git_presenter)
3. Cuando el codigo este preparado ejecutar el comando"git-presenter init"
4. Una vez inicializado se puede empezar la presentación con "git-presenter start"
5. Después usar los siguientes comandos para navegar por la presentación• next/n: move to the next slide (commit)
• back/b: move to the back slide (commit)
• end/e: move to the end of presentation
• start/s: move to the start of presentation
• list/l : list slides in presentation
• help/h: display this message