Sabemos que cookies
con httpOnly
y secure
flag son inmunes a XSS
y vulnerables a CSRF
ataques. Y al mismo tiempo, sabemos que local storage
es vulnerable a XSS
, pero puede proteger contra CSRF
.
Entonces, qué pasa si los combinamos de esta manera:
1) Use el token de acceso JWT
con la propiedad csrftoken en su carga útil y almacene este token en httpOnly y cookie segura y
2) Use csrftoken y guárdelo en el almacenamiento local. El token JWT y csrftoken se envían a un cliente con una autorización exitosa. El navegador envía el token JWT al servidor en cada solicitud y la aplicación pasa scrftoken en un encabezado. El servidor comprueba si csrftoken de JWT y el encabezado coinciden y, en caso contrario, bloquea la solicitud.
Parece que este esquema nos protegerá de ambos tipos de ataques. El código malintencionado que se inyecta en una página no tendrá acceso al token JWT (por lo que no hay XSS) y el código malicioso ejecutado por un usuario fuera de nuestro sitio no obligará a este usuario a enviar su csrftoken en un encabezado (por lo tanto, no CSRF).
Entonces, me pregunto si es una buena práctica y si usan este esquema en aplicaciones del mundo real.