Protección CSRF - 'páginas posteriores'

6

OWASP sugiere que al implementar la protección CSRF cualquier intento de "retroceder" en el navegador causará problemas, ya que la interacción con esta página anterior dará lugar a un evento de seguridad falso positivo CSRF en el servidor.

He visto cómo los bancos en línea manejan esto destruyendo la sesión tan pronto como respondes, pero me pregunto si hay alguna otra forma de solucionar esto. Idealmente, me gustaría mantener la sesión, pero simplemente redirigir al usuario a la página principal (en la que aterrizan después del inicio de sesión), pero no estoy seguro de si esa es una forma segura de hacer las cosas.

Este es probablemente un problema común en las aplicaciones web, ¿qué opciones tengo?

Gracias

    
pregunta NULLZ 15.04.2013 - 02:00
fuente

1 respuesta

5

Es perfectamente posible usar el patrón de token del sincronizador junto con el soporte de navegación / multi-pestaña adecuado. Es solo si sigues el consejo cuestionable:

  

Para mejorar aún más la seguridad de este diseño propuesto, considere la posibilidad de aleatorizar el nombre del parámetro del token CSRF o el valor para cada solicitud

que tienes problemas. En realidad, no hay ninguna buena razón para hacer esto en cada solicitud.

El token CSRF solo tiene una ventaja al cambiar de lugar la autorización, generalmente en el inicio de sesión y otras rutas que cambian el estado de inicio de sesión (por ejemplo, registro, recuperación de cuenta, usuario de conmutación). Estos son los puntos en los que también debería estar ciclando su identificador de sesión, por lo que tiene sentido hacer ambas cosas a la vez. Cambiar la ID de sesión evita el secuestro de la sesión a través de la fijación de la sesión; el cambio del token CSRF evita un ataque CSRF a través de la fijación de la sesión.

Navegar de nuevo a una página en caché en el estado de cierre de sesión o de inicio de sesión anterior (o mantener una abierta en otra pestaña) y luego intentar romper algo se rompe, pero la mayoría de las personas probablemente no esperarán que funcione. en ese punto.

Puede agregar algún JavaScript para detectar esa situación si lo desea, verificando que la cookie de sesión coincida con la que se usó en el momento de la creación de la página. (O una cookie asociada que no es el identificador y no es httponly , según corresponda). Luego, si no coincide, puede agregar un div de advertencia y volver a cargar el enlace en la página, y / o evitar los controles de formulario activos. en la página de ser receptivo. Ejecutaría esa verificación onload , más onpageview para bfcache si está permitiendo el almacenamiento en caché, y posiblemente en un sondeo ocasional para detectar el caso de múltiples pestañas. (Esto también puede ser útil para capturar el tiempo de espera de sesión en el lado del cliente y presentar un error más amigable).

    
respondido por el bobince 15.04.2013 - 09:56
fuente

Lea otras preguntas en las etiquetas