Mautic Pixel

Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. M谩s Informaci贸n. Aceptar

Protecci贸n CSRF en mi API REST

Luis Miguel L贸pez Maga帽a
  • Escrito por Luis Miguel L贸pez Maga帽a el 17 de Diciembre de 2019
  • 2 min de lectura | Desarrollo Web
Protecci贸n CSRF en mi API REST

Qu茅 es CSRF

CSRF (Cross-Site Request Forgery) es un tipo de protecci贸n que impide que un sitio web pudiera hacer peticiones maliciosas a otro sitio web que fuese seguro, en caso de tener ambos abiertos a la vez en dos pesta帽as diferentes del navegador, y nos hubi茅semos autenticado el segundo.

Un ejemplo ser铆a el siguiente:

  • Iniciamos sesi贸n en mibanco.com.

  • Sin cerrar sesi贸n, abrimos otra pesta帽a y accedemos a sitiodudoso.com.

  • Entonces, sin CSRF, sitiodudoso.com podr铆a tener alg煤n tipo de mecanismo, por ejemplo, un enlace que fuese muy llamativo para pinchar en el mismo, la carga de una imagen o simplemente un script de JavaScript, que pudiera hacer una petici贸n POST.

  • En esta petici贸n, conociendo m铆nimamente la estructura de la API o aplicaci贸n en la cual estamos logueados en mibanco.com, se podr铆a tratar de hacer un traspaso de dinero de una cuenta a otra.

C贸mo funciona CSRF

CSRF es un mecanismo mediante el cual, para realizar este tipo de peticiones, sobre todo las peticiones POST, el cliente tiene que enviar un token, conocido como token CSRF o XSRF.

Si no se env铆a ese token o el que se ha enviado no es v谩lido, la operaci贸n no s茅 realizar铆a y podr铆amos obtener un mensaje de respuesta como el que vemos en la imagen.

Imagen 0 en Protecci贸n CSRF en mi API REST

Spring Security y CSRF

Spring Security, por defecto, habilita la protecci贸n CSRF, y, adem谩s, provee de muchos mecanismos para generar dicho token, donde suelen intervenir cookies.

Por ejemplo, utilizando Thymeleaf, a la hora de implementar un formulario sin tocar nada m谩s, si vemos el c贸digo fuente que genera el c贸digo HTML, podemos ver como el servidor se ha encargado, al procesar la plantilla y generar todo el c贸digo del formulario, de a帽adir ese campo de token cada vez que se vaya a enviar un campo de formulario.

Si desarrollamos una API, por ejemplo, para una aplicaci贸n de Angular, desde Spring podr铆amos tambi茅n generar dicho token y enviarlo dentro de un encabezado.

驴Es necesario CSRF para un API REST?

Algunos autores piensan que si no va a haber cookies no har铆a falta la protecci贸n CSRF, por varios motivos:

  • Los navegadores normalmente, y es algo que queda transparente para el usuario, se est谩n enviando cookies constantemente. Esto se puede comprobar desde la inspecci贸n que ofrecen algunos navegadores, buscando d贸nde se ha hecho la petici贸n, ver peticiones y respuestas y ver que intervienen bastantes cookies por detr谩s.

  • Los ataques CSRF dependen mucho de este comportamiento y de la utilizaci贸n de cookies, con lo cual, si no utilizamos cookies o no se conf铆an en ellas, no habr铆a necesidad de protegerse frente ataques de este tipo.

Por otro lado, est谩 tambi茅n el argumento de que REST es stateless (sin estado), por lo tanto:

  • Una aplicaci贸n REST no se encargar谩 de rastrear el estado del lado cliente.

  • Si se utilizan sesiones a trav茅s de cookies, estar铆amos tratando de rastrear este estado y, por tanto, nuestra aplicaci贸n no es totalmente REST, y, por ende, no es totalmente stateless.

  • Si RESTful no debe necesitar cookies ni sesiones, por tanto, no deber铆amos tener la necesidad protegernos frente a CSRF.

Conclusiones

De todo lo anterior, podemos sacar varias conclusiones

  • Si de alguna manera vamos a acabar usando cookies, s铆 que vamos a necesitar este tipo de protecci贸n que ofrece CSRF.

Por ejemplo, si en lugar de almacenar el token JWT dentro del almacenamiento local del navegador, que quiz谩s no sea una buena pr谩ctica, lo queremos mantener a trav茅s de alguna cookie, en ese caso tendr铆amos que tener cuidado y ser铆a bueno que implement谩semos la protecci贸n CSRF.

  • Si lo que estamos desarrollando son aplicaciones web como tales, que tengan un motor de plantillas c贸mo podr铆a ser Thymeleaf, la protecci贸n CSRF se convierte en una aut茅ntica obligaci贸n, a la cual nos va a ayudar Spring Security.

Relacionado

Te dejamos una selecci贸n de cursos, carreras y art铆culos

Curso de seguridad en tu API REST con Spring Boot

Curso de seguridad en tu API REST con Spring Boot

curso

Con este curso aprender谩s:

  • Conocer谩s los elementos necesarios de Spring Security para tu API REST
  • Aprender谩s en qu茅 consiste la autenticaci贸n y la autorizaci贸n.
  • Conocer谩s las diferentes posibilidades de implementaci贸n de la seguridad.

Duraci贸n: 5 horas y 39 minutos

Curso de elementos avanzados en tu API REST con Spring Boot

Curso de elementos avanzados en tu API REST con Spring Boot

curso

Con este curso aprender谩s:

  • Aprender谩s a manejar modelos de datos m谩s completos
  • Conocer谩s c贸mo paginar las consultas de tu API REST
  • Ser谩s capaz de aplicar el patr贸n DTO en peticiones y respuestas

Duraci贸n: 5 horas y 19 segundos

Curso de desarrollo de una API REST con Spring Boot

Curso de desarrollo de una API REST con Spring Boot

curso

Con este curso aprender谩s:

  • Conocer谩s las caracter铆sticas de la arquitectura REST.
  • Aprender谩s a generar un proyecto de Spring Boot para una API REST.
  • Utilizar谩s librer铆as como Lombok.

Duraci贸n: 4 horas y 34 minutos

Estas son algunas de las empresas que ya conf铆an en OpenWebinars

Profesores y profesionales

Nuestros docentes son profesionales que trabajan d铆a a d铆a en la materia que imparten

Convi茅rtete en profesor de OpenWebinars