Quiero proteger mi aplicación contra XSRF. Aunque realmente no pude entender cuál es el problema y cómo funciona mi solución, después de algunas investigaciones se me ocurrió una solución que utiliza Angular. Hasta donde llegué, mi solución requiere los siguientes pasos:
- El cliente envía una solicitud para mi SPA.
- Envío un token XSRF (no solo HTTP para que JS pueda leerlo). También guardo este token XSRF en la sesión de usuarios en el servidor.
- Para cada solicitud POST quiero que mi cliente lea el token de XSRF y establezca un encabezado
X-XSRF-TOKEN
para este token. - Comprobaré cada solicitud comprobando si el encabezado de la solicitud y la sesión del usuario coinciden con el token XSRF. Si lo hacen, también verificaré la autenticación de JWT si es necesario.
- Después de validar el token XSRF, haré cambios en la base de datos. También cambiaré el token de XSRF nuevamente, y enviaré el token nuevo al usuario, y cambiaré el token para la sesión.
Pero no estoy seguro de cómo esto ayuda, si tengo una vulnerabilidad XSS, ya que cualquier código JavaScript inyectado también podría hacer lo mismo. Quiero entender el problema y cómo ayuda esa solución.
Para tu información, también estoy implementando la autenticación basada en JWT, usando Redis para la administración de sesiones, en un servidor Express.