CSRF en llamadas API desde Javascript en el navegador

2

Noté que los tokens se usaban en las presentaciones de formularios para evitar ataques CSRF, aunque en 2016 muchas personas se están moviendo a JS frontend & APIs tranquilos. Estoy desconcertado, con este enfoque, ¿ya no hay necesidad de tokens CSRF?

Creo que CSRF es un problema en el envío de formularios ya que todos los datos de la sesión se envían con cada solicitud . ¿Pero es diferente AJAX? Es decir. ¿Todas las cookies (datos de sesión) no se envían?

Puede asumir que mi API está protegida por CORS (sobre TLS), es decir, Access-Control-Allow-Origin está configurado solo para el sitio del que espero que se recopilen los datos.

Entonces, lo que pregunto es: es CORS & ¿Una API de AJAX llama a la forma de evitar la generación de tokens en mi código de usuario?

    
pregunta hendry 03.03.2016 - 03:08
fuente

1 respuesta

1

Solo las llamadas Ajax de IIUC pueden establecer encabezados personalizados, y están restringidos por dominio.

Btw CORS no es un tipo de protección, está ahí para permitir menos protección (es decir, le permite realizar solicitudes entre dominios)

Entonces, simplemente agregando X-CSRF-CHECK: 1 a las llamadas AJAX de su aplicación y haciendo que su backend como PHP compruebe $_SERVER['HTTP_X_CSRF_CHECK'] , no tiene que generar tokens aleatorios para evitar ataques CSRF, ya que otros sitios web no pueden establecer esos encabezados. Esto es genial, ya que sus formularios pueden ser más fáciles de almacenar en caché ahora.

Un atacante que puede crear un encabezado no tendrá los datos de su sesión ya que no estarán en la sesión de su navegador con el servidor.

Un atacante CSRF que no puede crear un encabezado, aunque puede usar los datos de tu sesión, fallará el encabezado X_CSRF_CHECK' en tu backend.

    
respondido por el hendry 04.03.2016 - 02:53
fuente

Lea otras preguntas en las etiquetas