🗃 ¿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
- Cross-Site Request Forgery (CSRF)
- 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
- 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
- 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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?