En una app web de navegador, ¿dónde está más a salvo de un robo por XSS un token de sesión o autenticación?
Opciones
- En localStorage, donde los scripts de la página pueden leerlo
- En una variable JavaScript global dentro de la página
- En una cookie HttpOnly, Secure y SameSite (Opción correcta)
- En la query string de la URL de cada petición
Respuesta
En una cookie HttpOnly, Secure y SameSite
Por qué
Si un atacante inyecta JavaScript en tu página (XSS), ese script puede leer localStorage y las variables JS y enviarse tu token.
Una cookie HttpOnly no se puede leer desde JavaScript; el navegador simplemente la envía con las peticiones. Secure = solo por HTTPS; SameSite = no se envía en la mayoría de peticiones entre sitios.
Las cookies necesitan protección CSRF, que SameSite cubre en buena parte.
Recuerda
Token de autenticación en el navegador → cookie HttpOnly + Secure + SameSite.