¿Por qué las solicitudes Ajax son vulnerables a los ataques CSRF si se aplica la política del mismo origen?

14

Lo que sé sobre CSRF es que un sitio web malicioso engaña a un usuario normal para que envíe una solicitud a un sitio web de confianza mediante un formulario.

Entiendo que es posible porque podemos publicar formularios en diferentes dominios. Sin embargo, veo publicaciones de Stackoverflow que dicen que también se deben proteger las solicitudes AJAX utilizando un token.

¿La política del mismo origen obliga a que se envíe una solicitud AJAX solo al dominio que script fue cargado desde?

He oído hablar de Intercambio de recursos de origen cruzado , pero si mi entendimiento es correcto, necesita el servidor web para habilitarlo, por lo que un servidor normal no debería permitir dicha solicitud.

    
pregunta Songo 26.05.2014 - 16:46
fuente

1 respuesta

15

La solicitud aún se puede enviar, simplemente no se lee :

  
  • Normalmente se permiten escrituras de origen cruzado. Los ejemplos son enlaces, redirecciones y sumas de formularios [sic].
  •   
  • Normalmente, las lecturas de origen cruzado no están permitidas.
  •   

Por lo tanto, solo la lectura de la respuesta está protegida por la Política del mismo origen, no por la realización de la solicitud en sí, aunque solo ciertos encabezados se pueden usar en dominios cruzados sin CORS. Por ejemplo, solo se permiten los siguientes encabezados:

  
  • aceptar
  •   
  • Aceptar-Idioma
  •   
  • contenido-lenguaje
  •   
  • ID del último evento
  •   
  • Tipo de contenido
  •   

Otros, como X-Requested With no están permitidos, por lo que la presencia de un encabezado personalizado podría verificarse como una validación de la solicitud no se realizó entre dominios o desde un formulario que no sea AJAX.

Tenga en cuenta que una versión anterior de flash incluía una vulnerabilidad que permitía headers para ser configurado que normalmente estaría restringido por el navegador, y había otra vulnerabilidad que permitía cruzar las solicitudes de dominio se realizarán sin un crossdomain.xml válido para permitir la solicitud, por lo tanto, un todavía puede ser el método más seguro para prevenir CSRF .

    
respondido por el SilverlightFox 27.05.2014 - 11:32
fuente

Lea otras preguntas en las etiquetas