¿Necesito el token CSRF y cómo me agrega protección adicional (Angular / Node SPA)

1

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 usar set-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.

    
pregunta LJ Wadowski 03.08.2016 - 12:47
fuente

1 respuesta

2

El token también debe validarse fuera del mecanismo de cookies.

Supongamos que evil.example.com open en el navegador de Alice realiza una solicitud entre sitios al yoursite.example.org , luego el navegador enviará todas sus cookies a yoursite.example.org , incluidas las cookies de sesión o cualquier otra cookie que pueda estar usando para evitar el CSRF.

Para mitigar esto, también debe enviar el token utilizando otro método (describo el Double Submit Cookies porque es bastante simple). Por ejemplo, podría incluir un campo oculto en su formulario:

<input type=hidden name=csrftoken value=12321231 />

En el lado del servidor, simplemente verifica que el valor de su sesión (o valor de cookie) que está utilizando para CSRF coincida con el del campo de formulario oculto. Un atacante no puede falsificar una solicitud porque no conoce este valor, ni puede recuperarla para el usuario actual. Este valor debe generarse aleatoriamente por sesión (utilizando alguna fuente de entropía impredecible).

    
respondido por el SilverlightFox 03.08.2016 - 13:02
fuente

Lea otras preguntas en las etiquetas