No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

¿Dónde guardar tokens JWT?

9/13
Recursos

Aportes 2

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

🗃 ¿Dónde guardar tokens JWT?

Recursos

A note on CSRF attack and JWT authentication

Apuntes

  • La mayoría de internet / tutoriales utilizan localStorage

“No hay almacenamiento que sea seguro por sí mismo”

  • Existen dos vulnerabilidades que generalmente son las que más están presentes, están sujetas a ataques en sesiones y la forma en la que la guardemos
    1. Cross-Site Request Forgery (CSRF)
    2. Cross-Site Scripting (XSS)
  • Dependiendo de la opción en la que guardemos la información, estaremos expuestos a uno u a otro tipo de ataque
  • Si reconocemos que vulnerabilidades tiene nuestro almacenamiento, podremos tomar medidas para realizarlas de mejor forma

¿Dónde guardar tokens JWT?

  • Cookie (Secure, HttpOnly, SameSite)

    ✅ XSS

    ⚠️ CSRF

    • Porque cuando las cookies se envían al servidor, este último necesita una seguridad adicional para saber si esa cookie que está llegando con el request la está realizando realmente un usuario o atáquente
  • Session storage

    ✅ CSRF

    ⚠️ XSS

    • Si nuestros atacantes ganan acceso a nuestro código, inyectando código podrían obtener y leer nuestros almacenamientos
    • Estos ataques pueden suceder también mediante NPM y el navegador no tiene ninguna forma de saber si lo que está sucediendo es por parte de nuestro código o de un atacante

Recomendación de OWASP

  1. sessionStorage
    • Es volátil y vulnerable
    • Fingerprint adicional contra proteger Cross-site Scripting (XSS)
      • Se guardaría en una cookie, es una cadena única que nadie más que el servidor puede crear
      • Esta se crearía cuando se inicie la sesión, se guarda en el servidor y se envía junto con el valor del sessionStorage, el servidor debería esperar ambos valores y para realizar alguna acción deberían ser ambos válidos
  2. Cookie
    • Las cookies deben ser seguras
    • lo primordial es tener un servidor con HTTPS
    • Secure + HttpOnly
    • Protección adicional contra Cross-Site Request Forgery (CSRF)
      • Agregamos una protección adicional la cual se pondrá en otra cookie, ambas se enviarían al servidor y estas serán validadas
    • El CSRF ya está bastante soportado por diferentes frameworks y librerías
      • CSRF hace parte de las cosas más básicas de seguridad con manejo de cookies cuando tenemos un servidor
      • Next Auth nos da un CSRF

¿Cómo lo hace Next Auth?

  • Autenticación en el navegador
  • JWT se crea en el servidor y se guarda en una cookie (Secure*, HttpOnly)
  • Todos los request se hacen a través del servidor.
  • CSRF para páginas login y logout

¿Dónde guardar token JWT?

  • 🚩 Localstorage solo se debe usar para fines didácticos.
  • ✅  sessionStore + fingerprint en una cookie para protegerse de XSS.
  • ✅  cookie (https + secure + http only) + una cookie dedicada para protegerse de CSRF.

Consideraciones para el manejo de sesión segura

  • Autenticación del cliente.
  • JWT creado en el servidor y almacenado en una cookie.
  • Los request tienen una validación de origen.
  • CSRF para login y logout.