Estaba leyendo sobre XSRF y me gustaría asegurarme de que entiendo el problema correctamente y saber si mi aplicación está protegida contra ese tipo de ataque.
Cómo entiendo que funciona CSRF:
- agregar una cadena aleatoria (?) que se guarda en su cookie con el encabezado
set-cookie
o con un código javascript (entonces no puede ser solo HTTP, así que supongo que es mejor usarset-cookie
), en teoría solo se puede acceder desde el dominio que se configuró - esa cadena se valida con cada solicitud de la API para garantizar que la solicitud no se realice desde un origen diferente
Solución que tengo actualmente:
- la sesión la establece el servidor después de la autenticación del usuario (inicio de sesión) y su ID se configura como una cookie HTTPS única
- el ID de sesión es una cadena larga y aleatoria que se guarda en la base de datos con información sobre la cadena, el IP y el ID de usuario del usuario del navegador de los usuarios
- JS no puede acceder a la cookie, todas las solicitudes se configuran con
XMLHttpRequest.withCredentials
para pasar la cookie al servidor - el ID de sesión se valida con cada solicitud también contra el agente de usuario y la IP
- la sesión es válida por 10 minutos, pero puede extenderse
Además:
- Tengo un CSP configurado para permitir contenido solo para unos pocos dominios de confianza
- Tengo la configuración de CORS para permitir solicitudes solo de orígenes de confianza
Cuando veo que mi ID de sesión actúa un poco como token CSRF. Me gustaría saber si necesito un token CSRF adicional para evitar que XSRF o la solución que tengo actualmente cubra esa vulnerabilidad de manera satisfactoria.
La seguridad es un área en la que soy nuevo y no me siento seguro. Aprecio cualquier ayuda.