Protección CSRF en Spring Security

Los ataques de tipo CSRF (Cross‐site Request Forgery) buscan lograr que la victima ejecute peticiones maliciosas sin tener conocimiento de ello, en la web puedes encontrar información más detallada sobre este tipo de ataques, lo que nos interesa de momento es conocer como evitar este tipo de ataques en las aplicaciones web que utilicen Spring Security para su protección.

El método utilizado para protegernos de los ataques CSRF es definir un token que será sincronizado con la sesión actual, cuando se intente ejecutar una petición Spring Security comprobará si se trata de un token válido, si no lo es impide la ejecución de la petición, de este modo un atacante no podrá enviar peticiones maliciosas ya que no conoce el token csrf.

Tutorial Spring Security Protección CSRF

En la configuración Java que hemos venido utilizando en la serie de tutoriales de seguridad hemos deshabilitado la protección ya que la misma viene activada por defecto, la deshabilitamos con el código:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
}

Con la configuración XML podemos desactivar la protección de este modo:

<http>
   <!-- ... -->
   <csrf disabled="true"/>
</http>

Si utilizamos formularios JSP debemos agregar el siguiente campo oculto para generar el token.

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

Por ejemplo, agregaremos la protección a un formulario que nos permite cerrar la sesión, de este modo impedimos que atacante nos cierre la sesión.

<c:url var="logoutUrl" value="/logout"/>

<form action="${logoutUrl}" method="post">
   <input type="submit" value="Log out" />
   <input type="hidden"
          name="${_csrf.parameterName}"
          value="${_csrf.token}"/>
</form>

Otra forma de hacerlo es usando los security taglib, primero debemos agregar la siguiente dependencia al proyecto:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>${security.version}</version>
</dependency>

Debemos agregar lo siguiente en nuestra página JSP.

<%@ taglib prefix="s" uri="http://www.springframework.org/security/tags" %>

Ahora para agregar el token solo debemos usar:

<s:csrfInput />

Cuando utilicemos el taglib para manejar formularios Spring Security automáticamente añadirá el token requerido para la protección CSRF, el taglib es el siguiente:

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

El uso del mismo lo vimos en el tutorial: Spring MVC Formularios.

Comentarios

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Acceso a la webcam con OpenCV

JavaFx 8 Administrar ventanas

Analizador Léxico