CSRF Protección para API JSON con autenticación de cookie [duplicado]

1

Estoy creando la API para un complemento de SPA y Chrome con Rails, y estoy dispuesto a usar cookies seguras de HTTPOnly para la autenticación porque:

  • Esta es la solución predeterminada para las bibliotecas de autenticación de Rails estándar como Devise y Sorcery.
  • Rails ha cifrado las sesiones del lado del cliente, lo que significa que no hay requisitos de almacenamiento del lado del servidor o búsqueda de base de datos (sí, sé que todavía necesitaré algún tipo de seguimiento y búsqueda del lado del servidor si quiero implementar la invalidación de sesión adecuada).
  • Es transparente para las bibliotecas cliente basadas en la web.
  • Las cookies están un tanto endurecidas en comparación con el almacenamiento local, y el espacio del problema está pisado y entendido.

Al habilitar el modo API de Rails, se deshabilitan las cookies y la protección CSRF, por lo que he vuelto a habilitar las cookies, pero la protección CSRF no es tan fácil de volver a habilitar porque asume que primero se procesará un formulario (es decir, no una solicitud POST que viene en frío) y probablemente requerirá un poco de manipulación para configurar.

Si las cookies están deshabilitadas, entiendo que CSRF no es un problema, sin embargo, por lo que puedo decir, no hay forma de que un sitio malicioso falsifique una solicitud para el tipo application/json sin usar XHR, lo cual no sería permitido sin la autorización explícita de CORS.

¿Es un buen modelo de seguridad para autenticar una API JSON con cookies pero no un token CSRF que asuma la validación adecuada del tipo de contenido?

    
pregunta gtd 26.08.2017 - 08:45
fuente

1 respuesta

1

Sí, si valida el Content-Type de la solicitud POST , esto no puede ser falsificado por un atacante en una situación XHR. Además, como mencionó un "complemento" de Chrome (¿extensión?), Vale la pena señalar que las extensiones de Chrome mantienen un depósito de cookies por separado, por lo que un ataque CSRF requeriría que un atacante logre que su extensión emita una solicitud en su nombre, no solo un atacante CSRF en la sesión principal del navegador.

    
respondido por el David 26.08.2017 - 17:26
fuente

Lea otras preguntas en las etiquetas