M4-UF1 FRAMEWORK SPRING

UNIDAD 10: Seguridad en Spring

eugeniaperez.es

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.1 Principales vulnerabilidades

Las aplicaciones Web presentan vulnerabilidades inherentes a su arquitectura independientemente de la tecnología con las que estén construidas. 

OWASP es una organización que periódicamente publica un documento de las 10 mayores vulnerabilidades o las que son más explotadas por los posibles atacantes. 

Ver: http://es.wikipedia.org/wiki/OWASP_Top_10

 

 

 

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.1 Principales vulnerabilidades

La última publicación data de 2013:

  1. Inyección de SQL.
  2. Pérdida de autenticación y gestión de sesiones.
  3. Cross site scripting.
  4. Referencia directa insegura a objetos.
  5. Configuración de seguridad incorrecta.

Ver más en: https://www.owasp.org/images/5/5f/OWASP_Top_10_-_2013_Final_-_Espa%C3%B1ol.pdf

 

 

 

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

SQL Injection: toda aplicación que realice consultas SQL a una BD puede ser susceptible a este tipo de ataques y debe ser revisada.

¡¡Las consultas deben ir siempre parametrizadas o construidas a partir de una API, y nunca mediante concatenaciones de texto!!

 

 

 

 

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Text

String query = "SELECT login, password FROM User WHERE login =" + user.login + " 
AND password =" + user.password;
SELECT login, password FROM User WHERE login = 'eugenia' AND password = 'test';
SELECT login, password FROM User WHERE login = 'eugenia' AND password = 'test' OR 1=1;

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Con esto, la consulta devolvería todos los resultados de la tabla User porque esta condición siempre es cierta, ¡¡con lo que ese posible atacante tendría acceso a los datos de todos los usuarios de nuestra aplicación!!

La manera de evitar esto es utilizar PreparedStatements si estamos usando JDBC con paso de parámetros...

query.setParameter(...)

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

Spring nos permite proteger las partes que queramos en nuestra app.

Para ello utilizaremos el filtro en el web.xml:

springSecurityFilterChain

A continuación se configuran las restricciones en el application-config o root-context, al estilo de las ACLs.

 

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

Se incluyen los tags (normalmente ya establecido por defecto): 

 

Y una serie de reglas basadas en la URL que permiten o deniegan el acceso a usuarios (estilo ACL...)

Algo muy útil del Fw es que te genera automáticamente la pantalla de login, logout y remember-me...

xmlns:security="http://www.springframework.org/schema/security"

Busca la primera coincidencia

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

Recuerda incluir las dependencias de seguridad necesarias:

  • spring-security-core
  • spring-security-config
  • spring-security-taglibs
  • spring-security-web

 

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

La validación se puede realizar mediante usuarios/roles en XML o bien mediante jdbc, indicando un Datasource y las queries de validación:

 

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

Cuando utilices jdbc, recuerda crear las tablas adecuadas para las queries de validación:

 

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

Aspectos de mejora

  • Encriptación de contraseñas: <security:authentication-manager>
  • Personalización de páginas de login, logout y error
  • Utilizar distintos perfiles para ser gestionados por Maven en función del entorno (dev, prepro, prod...)

 

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

Para la personalización de login:

 

 

Permitimos la acción de login a los usuarios:

 

<security:form-login login-page="/mycustomlogin"
	default-target-url="/home" authentication-failure-url="/mycustomlogin?error"
	username-parameter="username" password-parameter="password" />
<security:logout logout-success-url="/mycustomlogin?logout" />
<security:intercept-url pattern="/mycustomlogin" access="permitAll" />

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

Creamos la página personalizada con el formulario de login.

Incluimos la acción específica de login en el controlador:

 

@RequestMapping(value = "/mycustomlogin", method = RequestMethod.GET)
public String customLogin (Locale locale, Model model) {
	logger.info("Showing login The client locale is {}.", locale);

	return "customLogin";
}

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

Autenticación: 

También podemos personalizar otras páginas, como la de acceso denegado (Error 403):

 

 

 

Y finlmente crea la página de error (en /resources/403.html)

<error-page>
        <error-code>403</error-code>
        <location>/resources/403.html</location>
</error-page>

Añade estas líneas en el 

web.xml

UNIDAD 10: seguridad en spring

eugeniaperez.es

10.2 Prevención de ataques

A tener en cuenta, en general con Spring... 

Introducir seguridad en nuestra aplicaciones es muy simple, pero no te exime de que, sobre todo cuando las aplicaciones se van complicando, usan el MVC y otras tantas librerías/frameworks, se solapen unas con otras...

Intenta usar la consola y la depuración en la medida de lo posible, y fíjate en la primera de las stack trace que se genera cuando salta una excepción. 

 

Errores poco descriptivos

Solapamiento de dependencias 

unidad 10: SEGURIDAD EN SPRING

 

eugeniaperez.es

10.2 Prevención de ataques

 

Descarga el proyecto springmvc.security del repositorio de Bitbucket:

Usuario: 

Psswd:

URL: https://eugenia_perez@bitbucket.org/eugenia_perez/springmvc.security.git

 

 

Unit 10

By eugenia_perez