INTRODUCCIÓN A SPRING SECURITY Santiago Márquez Solís
Contenidos Introducción Relación de Módulos Funcionamiento Clases Principales Configuración
Spring Security (1) Introducción (1) Es uno de los frameworks de seguridad web mas utilizados hoy en día Está basado en Acegi un proyecto que paso a formar parte de Spring (2003) 2006 – versión 1.0.0 Actualmente (enero 2011) – versión 3.0.x Se caracteriza fundamentalmente por ser no invasivo La versión 3.x necesita la JRE 5 para funcionar
Spring Security (2) Introducción (2) Importante su sistema de versiones (Apache Portable Runtime Project): MAJOR.MINOR.PATCH Entre MAJOR no hay compatibilidad con otras MAJOR MINOR compatibilidad garantizada con MINOR menores PATCH compatibilidad garantizada con PATH menores Hace hincapié en los dos aspectos fundamentales de la seguridad de aplicaciones: Autenticación Autorización
Spring Security (3) Introducción (3) Autenticación (¿quién soy?) Consiste en determinar quien (principal) desea hacer uso del sistema (usuario o dispositivo) Spring Security provee los siguientes mecanismos: HTTP Basic HTTP Digest HTTP X.509 LDAP Autenticación basada en formulario OpenID … .  (ver documento adjunto)
Spring Security (4) Introducción (y 4) Autorización (¿qué puedo hacer?) Consiste en determinar qué se puede hacer sobre el sistema.  Spring Security define tres niveles: Nivel Web    Qué URLs se solicitan al servidor, Qué métodos y clases Java se quieren usar Qué instancias concretas de las clases van a utilizarse
Spring Security (5) Relación de Módulos (1) Núcleo (spring-security-core.jar) Contiene las clases e interfaces básicos para autenticación y control del acceso a las clases. Hay que incluirlo en cualquier aplicación que haga uso de Spring Security Los paquetes principales son: org.springframework.security.core org.springframework.security.access org.springframework.security.authentication org.springframework.security.provisioning org.springframework.security.remoting
Spring Security (6) Relación de Módulos (2) Web (spring-security-web.jar) Contiene los filtros y el código relacionado con la infraestructura de seguridad web Se necesitará si requerimos servicios de autenticación web y control del acceso basada en URL El paquete principal es: org.springframework.security.web.
Spring Security (7) Relación de Módulos (3) Config (spring-security-config.jar) (1) Contiene el código para la manipulación del namespace de seguridad Es poco probable que lo usemos en el código directamente Hay que incluirlo si estamos configurando Spring Security haciendo uso del namespace de seguridad en nuestro fichero de contexto El paquete principal es: org.springframework.security.config.
Spring Security (8) Relación de Módulos (4) Config (spring-security-config.jar) (1) Disponemos de las siguientes áreas: Web/HTTP Security Business Object (Method) Security Authentication Manager Access Decision Manager Authentication Providers User Details Service
Spring Security (9) Relación de Módulos (5) LDAP (spring-security-ldap.jar) Incluye el código necesario para autenticación basada en LDAP Lo usaremos si necesitamos autenticación basada en LDAP o administrar las entradas de usuario LDAP. El paquete principal es: org.springframework.security.ldap.
Spring Security (10) Relación de Módulos (6) ACL (spring-security-acl.jar) Implementación del objeto de dominio especializado ACL  Lo usaremos para aplicar seguridad a instancias de objetos especificas dentro de un dominio de la aplicación El paquete principal es: org.springframework.security.acls
Spring Security (11) Relación de Módulos (7) CAS (spring-security-cas-client.jar) Integración con el cliente de CAS Lo usaremos si queremos autenticación web con un servidor single Sing-on El paquete principal es: org.springframework.security.cas.
Spring Security (12) Relación de Módulos (y 8) OpenID (spring-security-openid.jar) Clases para autenticación web basadas en OpenID OpenID es un sistema de autenticación descentralizado, de modo que un usuario se valida en un URL y cualquier servidor que soporte el protocolo puede verificarlo. Lo usaremos si queremos realizar un proceso de autenticación contra un servidor OpenID externo. Necesitamos también tener OpenID4Java en nuestro entorno El paquete principal es:  org.springframework.security.openid
Spring Security (13) Funcionamiento (1) Spring Security se basa en el uso de filtros en los servlets (Servlet Filter) Esto permite la creación de capas de seguridad  Un Servlet Filter es cualquier clase que implemente el interface “javax.servlet.Filter” Interceptan la petición del usuario Realizan operaciones de pre y post proceso o de redirección de la petición
Spring Security (14) Funcionamiento (2) Spring Security al arrancar prepara un conjunto de hasta diez filtros para ser usados en secuencia    javax.servlet.FilterChain de J2EE Spring Security implementa su propia abstracción “VirtualFilterChain” del “FilterChain” para realizar la ejecución
Spring Security (15) Funcionamiento (3) El Servlet Filter Gráficamente
Spring Security (16) Funcionamiento (4) Servlet Container Usuario Web FilterToBeanProxy IoC Container FilterChainProxy Filter 1 Filter 3 Filter 4 Filter 5 Filter 2 Filter X Servlet Spring Security incluye unos 25 filtros
Spring Security (17) Funcionamiento (5) Algunos Filtros de Spring Security:
Spring Security (18) Funcionamiento (6) Authentication Mechanism Filter 3 Authentication “ Request” ProviderManager Authentication “ Response” creates creates calls Security ContextHolder populates returns
Spring Security (19) Funcionamiento (7) Sistema de Autorización (1):
Spring Security (20) Funcionamiento (8) Sistema de Autorización (2) Se basa en un sistema de votos Tres implementaciones: AffirmativeBased :  En el caso de recibir un sólo voto positivo, se le da acceso al recurso protegido.Se permite controlar el comportamiento en el caso que todos los votos son de abstención. ConsensusBased : Será necesario que haya más votos positivos que negativos para dar acceso al recurso protegido. Se permite controlar el comportamiento en el caso que todos los votos son de abstención UnanimousBased : Es necesario que todos los votos sean positivos para dar acceso al recurso protegido. Se permite controlar el comportamiento en el caso que todos los votos son de abstención.
Spring Security (21) Funcionamiento (9) Sistema de Autorización (3) AccessDecisionManager usan AccessDecisionVoter Dos implementaciones (1): RoleVoter :  comprueba si para cada rol especificado para proteger al recurso protegido lo presenta el principal que realiza la petición.  En tal caso emite un voto positivo y en caso contrario realizará un voto negativo.
Spring Security (22) Funcionamiento (10) Sistema de Autorización (y 4) AccessDecisionManager usan AccessDecisionVoter Dos implementaciones (2): AuthenticatedVoter .  permite diferenciar entre acceso anónimo al recurso, completamente autenticado u autenticado mediante mecanismos remember-me (IS_AUTHENTICATED:ANONYMOUS, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_FULLY).
Spring Security (23) Funcionamiento (y 11) Existen cuatro formas distintas de securizar las ejecuciones de métodos dentro de Spring Security: Configuración de seguridad a nivel global (uso del namespace)    Es la que veremos Configuración de seguridad usando el componente MethodSecurityInterceptor Configuración de seguridad basada en anotaciones (JSR-250 ó SpringSecurity). Configuración de seguridad a nivel de bean
Spring Security (24) Clases Principales (1): AuthenticationManager:  Es un interfaz Es el componente principal y el encargado de implementar el proceso de autenticación de las aplicaciones Implementa el método: Authentication authenticate (Authentication  authentication) throws AuthtenticationException;
Spring Security (25) Clases Principales Authentication:  Guarda los datos asociados a la entidad y el conjunto de roles que posee esta entidad Da soporte a AuthenticationManager para implementar el servicio de autenticación Métodos importantes: getPrincipal()    Devuelve la entidad autenticada getCredentials()    Devuelve las credenciales de la entidad autenticada
Spring Security (26) Clases Principales (2) SecurityContextHolder:  encargado de guardar los datos del principal y sus roles (autoridades) dentro del contexto de seguridad Guarda el objeto Authentication en el contexto de seguridad Generalmente coincide con el ThreatLocal Permite que la información que reside en el Authentication pueda ser consultada por cualquier componente de nuestra aplicación
Spring Security (27) Clases Principales (3) UserDetailsService Es el objeto en donde el AuthenticationManager delega la información del usuario Permite obtener información del usuario sobre el repositorio de seguridad Métodos: loadUserByUsername(username)    Devuelve un objeto “UserDetails” pasando como parámetro el nombre del usuario
Spring Security (27) Clases Principales (y 4) UserDetails Encapsula información del usuario autenticado Métodos: getAuthorities()    Autorizaciones del usuario getPassword()    Password del usuario getUsername()    Nombre de Usuario isAccountNonExpired() isAccountNonLocked() isEnabled() isCredentialsNonExpired()
Spring Security (28) Configuración (1) Hay que añadir un nuevo filtro a “web.xml” Y el listener adecuado para la carga del fichero de contexto
Spring Security (29) Configuración (2) Si no se específica, el fichero de contexto se llama “applicationContext.xml” Para especificar un nombre se hace uso de un parámetro “contextConfigLocation” para indicar a “ContextLoaderListener” el fichero
Spring Security (30) Configuración (3) En el “applicationContext.xml”se establece la configuración de la seguridad por namespace Los elementos básicos son (1): <http> Define las reglas de autenticación para las URLs Crea el “FilterChainProxy” <authentication-manager> Establece el mecanismo de validación que deseamos utilizar para la aplicación
Spring Security (31) Configuración (4) Los elementos básicos son (y 2) La configuración mínima de estos elementos es: Auto-config = “true” abreviatura para incluir en http:
Spring Security (32) Configuración (5)  Añadiendo página de login (1) Si no se indica Spring Security genera una por defecto Podemos indicar una del modo siguiente: “ IS_AUTHENTICATED_ANONYMOUSLY” indica si el usuario es anónimo
Spring Security (33) Configuración (6)  Añadiendo página de login (y 2) “ j_spring_security_check”, “j_username” y “j_password” son elementos del filtro UsernamePasswordAuthenticationFilter Los atributos “default-target-url” y “always-use-default-target” redirigen la petición después del login
Spring Security (34) Configuración (7) Otros proveedores de autenticación A través de Password Encoder (MD5 o SHA) Se añade con  “<password-encoder>” El método de codificación se marca en el atributo  “hash”  que puede ser “md5” o “sha” …  ver proyecto adjunto sobre autenticación en Base de Datos como otro proveedor de autenticación
Spring Security (35) Configuración (8) Añadiendo canal de seguridad HTTP/HTTPS Se consigue con el atributo  “requires-channel” Admite tres valores:  “http”, “https” y “any” Pueden configurarse los puertos a través de  “<port-mapping>”
Spring Security (36) Configuración (9) Detección del Timeout de Sesión Se consigue con  “<session-management>” En el atributo  “invalid-session-url”  se indica la página a la que ir cuando hay un timeout en el servidor
Spring Security (37) Configuración (10) Control de la Sesión (1) Se puede controlar las veces que un usuario está logado dentro de la aplicación Hay que añadir a web.xml el filtro:  org.springframework.security.web.session.HttpSessionEventPublisher Esto habilita  “<session-management>”  y  “<concurrency-control>” max-sessions     establece el máximo de sesiones por usuario error-if-maximun-exceeded    true si queremos que se produzca un error al exceder “max-sessions” session-authentication-error-url     Url a la que reenviar al usuario se produce el error
Spring Security (38) Configuración (11) Control de la Sesión (2)
Spring Security (39) Configuración (12) Control de la Sesión (3) Spring Security proporciona la posibilidad de controlar el ataque por fijación de sesión ( Session Fixation Attack) Escenario: Usuario A    cuenta bancaria en  http://BancoNoSeguro  (acepta cualquier tipo de SID de usuario) Usuario B    envía un correo a A con un texto tipo: “ Estimado cliente…… por favor haz clic en:  http://BancoNoSeguro/?SID=LO_QUE_QUIERAS Usuario A    usa el link enviado y se loga Usuario B    accede al mismo link ya que la sesión se recrea en su navegador
Spring Security (40) Configuración (13) Control de la Sesión (4) Para prevenir esto Spring Security crea una nueva sesión cuando el usuario se loga (por tanto el SID cambia entre sesiones) Se cambia con el atributo  “session-fixation-protection”  en  “<session-management>” Valores posibles: migrateSession : crea una nueva sesión y copia todos los atributos de sesión a la nueva sesión. Es el valor por defecto: newSession : Crea una nueva sesión sin copiar ningún valor existente
Spring Security (41) Configuración (14) Control de la Sesión (y 5)
Spring Security (y 42) Configuración (y 14) Seguridad en los métodos La forma estándar de hacerlo en mediante configuración a través del namespace y la etiqueta “<global-method-security>” y el uso de anotaciones

Spring Security

  • 1.
    INTRODUCCIÓN A SPRINGSECURITY Santiago Márquez Solís
  • 2.
    Contenidos Introducción Relaciónde Módulos Funcionamiento Clases Principales Configuración
  • 3.
    Spring Security (1)Introducción (1) Es uno de los frameworks de seguridad web mas utilizados hoy en día Está basado en Acegi un proyecto que paso a formar parte de Spring (2003) 2006 – versión 1.0.0 Actualmente (enero 2011) – versión 3.0.x Se caracteriza fundamentalmente por ser no invasivo La versión 3.x necesita la JRE 5 para funcionar
  • 4.
    Spring Security (2)Introducción (2) Importante su sistema de versiones (Apache Portable Runtime Project): MAJOR.MINOR.PATCH Entre MAJOR no hay compatibilidad con otras MAJOR MINOR compatibilidad garantizada con MINOR menores PATCH compatibilidad garantizada con PATH menores Hace hincapié en los dos aspectos fundamentales de la seguridad de aplicaciones: Autenticación Autorización
  • 5.
    Spring Security (3)Introducción (3) Autenticación (¿quién soy?) Consiste en determinar quien (principal) desea hacer uso del sistema (usuario o dispositivo) Spring Security provee los siguientes mecanismos: HTTP Basic HTTP Digest HTTP X.509 LDAP Autenticación basada en formulario OpenID … . (ver documento adjunto)
  • 6.
    Spring Security (4)Introducción (y 4) Autorización (¿qué puedo hacer?) Consiste en determinar qué se puede hacer sobre el sistema. Spring Security define tres niveles: Nivel Web  Qué URLs se solicitan al servidor, Qué métodos y clases Java se quieren usar Qué instancias concretas de las clases van a utilizarse
  • 7.
    Spring Security (5)Relación de Módulos (1) Núcleo (spring-security-core.jar) Contiene las clases e interfaces básicos para autenticación y control del acceso a las clases. Hay que incluirlo en cualquier aplicación que haga uso de Spring Security Los paquetes principales son: org.springframework.security.core org.springframework.security.access org.springframework.security.authentication org.springframework.security.provisioning org.springframework.security.remoting
  • 8.
    Spring Security (6)Relación de Módulos (2) Web (spring-security-web.jar) Contiene los filtros y el código relacionado con la infraestructura de seguridad web Se necesitará si requerimos servicios de autenticación web y control del acceso basada en URL El paquete principal es: org.springframework.security.web.
  • 9.
    Spring Security (7)Relación de Módulos (3) Config (spring-security-config.jar) (1) Contiene el código para la manipulación del namespace de seguridad Es poco probable que lo usemos en el código directamente Hay que incluirlo si estamos configurando Spring Security haciendo uso del namespace de seguridad en nuestro fichero de contexto El paquete principal es: org.springframework.security.config.
  • 10.
    Spring Security (8)Relación de Módulos (4) Config (spring-security-config.jar) (1) Disponemos de las siguientes áreas: Web/HTTP Security Business Object (Method) Security Authentication Manager Access Decision Manager Authentication Providers User Details Service
  • 11.
    Spring Security (9)Relación de Módulos (5) LDAP (spring-security-ldap.jar) Incluye el código necesario para autenticación basada en LDAP Lo usaremos si necesitamos autenticación basada en LDAP o administrar las entradas de usuario LDAP. El paquete principal es: org.springframework.security.ldap.
  • 12.
    Spring Security (10)Relación de Módulos (6) ACL (spring-security-acl.jar) Implementación del objeto de dominio especializado ACL Lo usaremos para aplicar seguridad a instancias de objetos especificas dentro de un dominio de la aplicación El paquete principal es: org.springframework.security.acls
  • 13.
    Spring Security (11)Relación de Módulos (7) CAS (spring-security-cas-client.jar) Integración con el cliente de CAS Lo usaremos si queremos autenticación web con un servidor single Sing-on El paquete principal es: org.springframework.security.cas.
  • 14.
    Spring Security (12)Relación de Módulos (y 8) OpenID (spring-security-openid.jar) Clases para autenticación web basadas en OpenID OpenID es un sistema de autenticación descentralizado, de modo que un usuario se valida en un URL y cualquier servidor que soporte el protocolo puede verificarlo. Lo usaremos si queremos realizar un proceso de autenticación contra un servidor OpenID externo. Necesitamos también tener OpenID4Java en nuestro entorno El paquete principal es: org.springframework.security.openid
  • 15.
    Spring Security (13)Funcionamiento (1) Spring Security se basa en el uso de filtros en los servlets (Servlet Filter) Esto permite la creación de capas de seguridad Un Servlet Filter es cualquier clase que implemente el interface “javax.servlet.Filter” Interceptan la petición del usuario Realizan operaciones de pre y post proceso o de redirección de la petición
  • 16.
    Spring Security (14)Funcionamiento (2) Spring Security al arrancar prepara un conjunto de hasta diez filtros para ser usados en secuencia  javax.servlet.FilterChain de J2EE Spring Security implementa su propia abstracción “VirtualFilterChain” del “FilterChain” para realizar la ejecución
  • 17.
    Spring Security (15)Funcionamiento (3) El Servlet Filter Gráficamente
  • 18.
    Spring Security (16)Funcionamiento (4) Servlet Container Usuario Web FilterToBeanProxy IoC Container FilterChainProxy Filter 1 Filter 3 Filter 4 Filter 5 Filter 2 Filter X Servlet Spring Security incluye unos 25 filtros
  • 19.
    Spring Security (17)Funcionamiento (5) Algunos Filtros de Spring Security:
  • 20.
    Spring Security (18)Funcionamiento (6) Authentication Mechanism Filter 3 Authentication “ Request” ProviderManager Authentication “ Response” creates creates calls Security ContextHolder populates returns
  • 21.
    Spring Security (19)Funcionamiento (7) Sistema de Autorización (1):
  • 22.
    Spring Security (20)Funcionamiento (8) Sistema de Autorización (2) Se basa en un sistema de votos Tres implementaciones: AffirmativeBased :  En el caso de recibir un sólo voto positivo, se le da acceso al recurso protegido.Se permite controlar el comportamiento en el caso que todos los votos son de abstención. ConsensusBased : Será necesario que haya más votos positivos que negativos para dar acceso al recurso protegido. Se permite controlar el comportamiento en el caso que todos los votos son de abstención UnanimousBased : Es necesario que todos los votos sean positivos para dar acceso al recurso protegido. Se permite controlar el comportamiento en el caso que todos los votos son de abstención.
  • 23.
    Spring Security (21)Funcionamiento (9) Sistema de Autorización (3) AccessDecisionManager usan AccessDecisionVoter Dos implementaciones (1): RoleVoter : comprueba si para cada rol especificado para proteger al recurso protegido lo presenta el principal que realiza la petición. En tal caso emite un voto positivo y en caso contrario realizará un voto negativo.
  • 24.
    Spring Security (22)Funcionamiento (10) Sistema de Autorización (y 4) AccessDecisionManager usan AccessDecisionVoter Dos implementaciones (2): AuthenticatedVoter . permite diferenciar entre acceso anónimo al recurso, completamente autenticado u autenticado mediante mecanismos remember-me (IS_AUTHENTICATED:ANONYMOUS, IS_AUTHENTICATED_REMEMBERED, IS_AUTHENTICATED_FULLY).
  • 25.
    Spring Security (23)Funcionamiento (y 11) Existen cuatro formas distintas de securizar las ejecuciones de métodos dentro de Spring Security: Configuración de seguridad a nivel global (uso del namespace)  Es la que veremos Configuración de seguridad usando el componente MethodSecurityInterceptor Configuración de seguridad basada en anotaciones (JSR-250 ó SpringSecurity). Configuración de seguridad a nivel de bean
  • 26.
    Spring Security (24)Clases Principales (1): AuthenticationManager: Es un interfaz Es el componente principal y el encargado de implementar el proceso de autenticación de las aplicaciones Implementa el método: Authentication authenticate (Authentication authentication) throws AuthtenticationException;
  • 27.
    Spring Security (25)Clases Principales Authentication: Guarda los datos asociados a la entidad y el conjunto de roles que posee esta entidad Da soporte a AuthenticationManager para implementar el servicio de autenticación Métodos importantes: getPrincipal()  Devuelve la entidad autenticada getCredentials()  Devuelve las credenciales de la entidad autenticada
  • 28.
    Spring Security (26)Clases Principales (2) SecurityContextHolder: encargado de guardar los datos del principal y sus roles (autoridades) dentro del contexto de seguridad Guarda el objeto Authentication en el contexto de seguridad Generalmente coincide con el ThreatLocal Permite que la información que reside en el Authentication pueda ser consultada por cualquier componente de nuestra aplicación
  • 29.
    Spring Security (27)Clases Principales (3) UserDetailsService Es el objeto en donde el AuthenticationManager delega la información del usuario Permite obtener información del usuario sobre el repositorio de seguridad Métodos: loadUserByUsername(username)  Devuelve un objeto “UserDetails” pasando como parámetro el nombre del usuario
  • 30.
    Spring Security (27)Clases Principales (y 4) UserDetails Encapsula información del usuario autenticado Métodos: getAuthorities()  Autorizaciones del usuario getPassword()  Password del usuario getUsername()  Nombre de Usuario isAccountNonExpired() isAccountNonLocked() isEnabled() isCredentialsNonExpired()
  • 31.
    Spring Security (28)Configuración (1) Hay que añadir un nuevo filtro a “web.xml” Y el listener adecuado para la carga del fichero de contexto
  • 32.
    Spring Security (29)Configuración (2) Si no se específica, el fichero de contexto se llama “applicationContext.xml” Para especificar un nombre se hace uso de un parámetro “contextConfigLocation” para indicar a “ContextLoaderListener” el fichero
  • 33.
    Spring Security (30)Configuración (3) En el “applicationContext.xml”se establece la configuración de la seguridad por namespace Los elementos básicos son (1): <http> Define las reglas de autenticación para las URLs Crea el “FilterChainProxy” <authentication-manager> Establece el mecanismo de validación que deseamos utilizar para la aplicación
  • 34.
    Spring Security (31)Configuración (4) Los elementos básicos son (y 2) La configuración mínima de estos elementos es: Auto-config = “true” abreviatura para incluir en http:
  • 35.
    Spring Security (32)Configuración (5) Añadiendo página de login (1) Si no se indica Spring Security genera una por defecto Podemos indicar una del modo siguiente: “ IS_AUTHENTICATED_ANONYMOUSLY” indica si el usuario es anónimo
  • 36.
    Spring Security (33)Configuración (6) Añadiendo página de login (y 2) “ j_spring_security_check”, “j_username” y “j_password” son elementos del filtro UsernamePasswordAuthenticationFilter Los atributos “default-target-url” y “always-use-default-target” redirigen la petición después del login
  • 37.
    Spring Security (34)Configuración (7) Otros proveedores de autenticación A través de Password Encoder (MD5 o SHA) Se añade con “<password-encoder>” El método de codificación se marca en el atributo “hash” que puede ser “md5” o “sha” … ver proyecto adjunto sobre autenticación en Base de Datos como otro proveedor de autenticación
  • 38.
    Spring Security (35)Configuración (8) Añadiendo canal de seguridad HTTP/HTTPS Se consigue con el atributo “requires-channel” Admite tres valores: “http”, “https” y “any” Pueden configurarse los puertos a través de “<port-mapping>”
  • 39.
    Spring Security (36)Configuración (9) Detección del Timeout de Sesión Se consigue con “<session-management>” En el atributo “invalid-session-url” se indica la página a la que ir cuando hay un timeout en el servidor
  • 40.
    Spring Security (37)Configuración (10) Control de la Sesión (1) Se puede controlar las veces que un usuario está logado dentro de la aplicación Hay que añadir a web.xml el filtro: org.springframework.security.web.session.HttpSessionEventPublisher Esto habilita “<session-management>” y “<concurrency-control>” max-sessions  establece el máximo de sesiones por usuario error-if-maximun-exceeded  true si queremos que se produzca un error al exceder “max-sessions” session-authentication-error-url  Url a la que reenviar al usuario se produce el error
  • 41.
    Spring Security (38)Configuración (11) Control de la Sesión (2)
  • 42.
    Spring Security (39)Configuración (12) Control de la Sesión (3) Spring Security proporciona la posibilidad de controlar el ataque por fijación de sesión ( Session Fixation Attack) Escenario: Usuario A  cuenta bancaria en http://BancoNoSeguro (acepta cualquier tipo de SID de usuario) Usuario B  envía un correo a A con un texto tipo: “ Estimado cliente…… por favor haz clic en: http://BancoNoSeguro/?SID=LO_QUE_QUIERAS Usuario A  usa el link enviado y se loga Usuario B  accede al mismo link ya que la sesión se recrea en su navegador
  • 43.
    Spring Security (40)Configuración (13) Control de la Sesión (4) Para prevenir esto Spring Security crea una nueva sesión cuando el usuario se loga (por tanto el SID cambia entre sesiones) Se cambia con el atributo “session-fixation-protection” en “<session-management>” Valores posibles: migrateSession : crea una nueva sesión y copia todos los atributos de sesión a la nueva sesión. Es el valor por defecto: newSession : Crea una nueva sesión sin copiar ningún valor existente
  • 44.
    Spring Security (41)Configuración (14) Control de la Sesión (y 5)
  • 45.
    Spring Security (y42) Configuración (y 14) Seguridad en los métodos La forma estándar de hacerlo en mediante configuración a través del namespace y la etiqueta “<global-method-security>” y el uso de anotaciones