¿Es CORS y CSRF-tokens solo para las solicitudes POST y GET? [cerrado]

0

Tengo las siguientes preguntas con respecto a CSRF, SOP y CORS.

  1. ¿Los tokens CSRF solo protegen el envío de formularios con los métodos POST o GET? ¿Es esto solo una "práctica común" (en relación con el hecho de que solo los envíos de formularios son vulnerables como, por ejemplo, POSTAR una solicitud de transferencia de fondos en un sitio web bancario)

  2. ¿CORS solo está disponible (pasa por alto el SOP) cuando se solicita contenido con un método GET y no con POST? Si un formulario está protegido con el token CSRF, no tiene sentido referirse a CORS para realizar dicha solicitud (es decir, enviar el formulario desde un dominio diferente) debido al hecho de que incluso con CORS habilitado hay un token CSRF que protege ese contenido. (incluso si este no es un caso de uso típico del token CSRF).

  3. ¿Se basa CORS en la comprobación del encabezado de origen debido al hecho de que no se puede engañar al navegador de la víctima para que falsifique el encabezado de origen? Mientras que cURL nos permite falsificar encabezados, en este ataque en particular, ¿el navegador de la víctima no puede ser engañado?

He leído varias publicaciones sobre lo anterior, pero me encantaría una explicación más clara. Por ejemplo, He leído eso :

  

Sin embargo, la carga de recursos desde otros hosts como imágenes, scripts, hojas de estilo, iframes, formularios, etc. no están sujetos a esta limitación

Lo que me confunde es que la mayoría de los subprocesos relacionados con el token CSRF solo se desarrollan en ejemplos con formularios y datos de publicación con el método POST en un servidor y no explican el panorama general.

    
pregunta XII 14.05.2018 - 11:43
fuente

1 respuesta

4

Según lo que pides, creo que estás confundiendo un poco los conceptos:

  • CSRF es un método para ejecutar una acción autenticada entre sitios, es decir, desencadenada por un atacante pero ejecutada con la autenticación de un usuario ya registrado debido al envío automático de cookies de sesión existentes o credenciales de autenticación básicas. CSRF solo se trata de ejecutar la acción y no le importa leer el resultado.
  • En el contexto de CSRF CORS se trata de controlar qué solicitudes pueden enviarse el navegador al servidor, en primer lugar, mediante el XMLHTTPRequest o fetch API. No restringe el envío de solicitudes simples, que son solicitudes que se pueden crear sin XMLHTTPRequest o fetch incrustando un recurso, enviando un formulario, etc. Solo restringe aquellas solicitudes no simples (es decir, solicitudes con método personalizado, encabezado personalizado) .) podría enviarse entre sitios al tener solicitudes previas al vuelo antes de estas solicitudes no simples para verificar la política CORS del sitio para ver si se permite la solicitud real.
  • CORS no es la única política que cubre todo lo relacionado con cualquier tipo de solicitudes entre sitios, pero solo cubre un subconjunto específico.

Con esto en mente:

  
  1. ¿Los tokens CSRF solo protegen el envío de formularios con los métodos POST o GET?
  2.   

Un token CSRF es esencialmente un secreto que el atacante no puede adivinar. Puede ser utilizado para cualquier tipo de solicitud. Pero dado que con solicitudes no simples, la política CORS se verificará de todos modos, en realidad no agrega valor para dichas solicitudes. Por lo tanto, cuando se utiliza XMLHTTPRequest o fetch a menudo se impone una solicitud no simple agregando un encabezado personalizado para que no se necesite un token CSRF (más complejo).

  
  1. ¿CORS solo está disponible (pasa por alto el SOP) cuando se solicita contenido con un método GET y no con POST?
  2.   

CORS no tiene nada que ver con GET o POST, sino que se trata de solicitudes simples y no simples. Ambos tipos de solicitudes pueden usar GET o POST, aunque las solicitudes no simples también pueden usar métodos personalizados.

  
  1. ¿Se basa CORS en la comprobación del encabezado de origen debido al hecho de que no se puede engañar al navegador de la víctima para que falsifique el encabezado de Origen?
  2.   

CORS no se basa en verificar el encabezado Origin en absoluto. La política CORS es impuesta por el navegador y no por el servidor. Sin embargo, hay casos en los que es relevante verificar el encabezado Origin o Referer : como cuando se protege contra CSRF sin un token CSRF o cuando se restringe el acceso a WebSockets. Pero estos casos no están cubiertos por CORS, es decir, CORS no es lo único que se preocupa por las solicitudes entre sitios.

    
respondido por el Steffen Ullrich 15.05.2018 - 06:52
fuente

Lea otras preguntas en las etiquetas