Mitigar el inicio de sesión CSRF en sitios web de terceros

3

Estoy trabajando en un proyecto que requiere tener una funcionalidad de registro / inicio de sesión expuesta a los socios que administran su propio sitio web. Para algunos de estos sitios web, reutilizan nuestro propio backend, y solo cambian el estilo css, pero otros son completamente independientes: por esta razón, se ha pensado para preparar un formulario de inicio de sesión estático que se entregaría a los socios, lo que provocaría un POST solicitud a nuestros propios servidores.

(dependiendo de los argumentos en el formulario, haríamos un seguimiento de qué socio nos trajo qué usuarios, que aparentemente cubre una necesidad comercial de análisis)

Actualmente, estamos perdiendo la protección CSRF en algunos puntos finales, como el inicio de sesión. Cuando se me pidió que lo investigara, me di cuenta de que, con un formulario estático, no podríamos agregar tokens CSRF.

Parece ser un problema menor, pero sería bueno proteger a nuestros usuarios del inicio de sesión CSRF. Por esta razón pensé en 2 alternativas:

  • agregue un paso de confirmación antes de iniciar sesión en el usuario cuando se encuentre un conflicto en la cookie de sesión (descartado debido a que los cambios en el flujo lógico para la administración de la sesión son demasiado invasivos)
  • en lugar de un formulario estático, permita que nuestros socios utilicen un iframe que contendrá nuestro propio formulario de inicio de sesión, con protección CSRF y todo. Esto requeriría relajar el X-FRAME-OPTIONS específicamente para la página que mostrará este formulario de inicio de sesión

¿Hay una mejor solución? No creo que el clickjacking en nuestro formulario de inicio de sesión deba ser realmente una preocupación (y el clickjacking se usa normalmente para hacer lo que de otra manera podría obtenerse de manera trivial con un CSRF, creo que ... corregir este último parece tener una prioridad más alta)

    
pregunta berdario 24.03.2016 - 09:45
fuente

3 respuestas

1

Podrías revisar el encabezado del Referente. Esto se recomienda a menudo cuando no hay mejores alternativas, pero que yo sepa no es una técnica particularmente mala y solo se recomienda porque algunos usuarios eliminan el encabezado por razones de privacidad, e históricamente algunos complementos populares del navegador tenían vulnerabilidades que permitían el encabezado del Referente. para ser manipulado.

(Creo que los iframes son la mejor solución aquí si puedes usarlos. Hacer click en un formulario de inicio de sesión no parece ser una preocupación realista. La segunda mejor solución es usar un javascript para hacer una solicitud AJAX contra tu dominio La solución de berdario tal vez con un respaldo de revisión de encabezado de referencia para los navegadores que no admiten solicitudes de origen cruzado.)

    
respondido por el Macil 25.03.2016 - 23:40
fuente
1

Me di cuenta de que hay otra solución posible:

Cree un punto final que devolverá un token CSRF, devolverá un encabezado Access-Control-Allow-Origin que otorgará acceso exclusivo a los dominios de nuestros socios, y agregue algún javascript que obtenga este token y modifique el formulario (de lo contrario estático) agregándolo como un campo oculto.

Esto eliminaría la necesidad de usar iframes, pero creo que la seguridad es una solución inferior: cuanto más dominios asociados se agreguen, mayor será el riesgo de que algún día uno de estos desaparezca, nos olvidaremos de eliminar desde el encabezado y el nombre de dominio se pondrá en cuclillas ... exponiendo potencialmente TODOS nuestros puntos finales a ataques CSRF nuevamente. (en comparación con el riesgo de clickjacking insignificante en el formulario de inicio de sesión solamente).

    
respondido por el berdario 25.03.2016 - 22:40
fuente
0

Creo que necesita implementar una de las mejores prácticas para el inicio de sesión, limitar el número de intentos de inicio de sesión (por ejemplo, 5 intentos), luego debe bloquear la cuenta durante algunos minutos (por ejemplo, 30 minutos). Creo que es una buena solución, porque puedes controlar los intentos de automatización (ataque de fuerza bruce) de una manera fácil.

    
respondido por el hmrojas.p 24.03.2016 - 22:09
fuente

Lea otras preguntas en las etiquetas