¿Cómo CORS previene XSS?

39

Recientemente me enteré de CORS y obtuve el la impresión de que su propósito es evitar XSS . Con CORS, el navegador bloquea las solicitudes a diferentes dominios, a menos que haya encabezados en su lugar.

Pero si una persona con intenciones maliciosas inyecta un poco de JavaScript en una página para robar las cookies de los usuarios y enviarlas a una URL que controla, todo lo que tiene que hacer es agregar el siguiente encabezado en el lado del servidor para que la solicitud funcione de todos modos :

Access-Control-Allow-Origin: *

Entonces, ¿cómo CORS previene XSS? ¿O malentendí el propósito de CORS, y simplemente no tiene nada que ver con XSS per se?

    
pregunta Gigi 23.12.2015 - 14:24
fuente

3 respuestas

29

TL; DR: ¿Cómo CORS previene XSS? No lo hace. No está destinado a hacerlo.

CORS está destinado a permitir que los hosts de recursos (cualquier servicio que haga que sus datos estén disponibles a través de HTTP) restrinjan los sitios web que pueden acceder a esos datos.

Ejemplo: está alojando un sitio web que muestra datos de tráfico y está utilizando solicitudes AJAX en su sitio web. Si SOP y CORS no estuvieran allí, cualquier otro sitio web podría mostrar sus datos de tráfico simplemente AJAXing a sus puntos finales; Cualquiera podría "robar" fácilmente sus datos y, por lo tanto, sus usuarios y su dinero.

En algunos casos, se pretende compartir datos ( C ross O rigin R esource S haring) , p.ej al mostrar Me gusta y cosas de la API de Facebook en su página web. Simplemente eliminar SOP para lograrlo es una mala idea debido a las razones explicadas en el párrafo anterior. Así se introdujo CORS.

CORS no está relacionado con XSS porque cualquier atacante que pueda colocar una pieza maliciosa de JavaScript en un sitio web también puede configurar un servidor que envíe los encabezados CORS correctos. CORS no puede evitar que JavaScript malicioso envíe los identificadores de sesión y las cookies de permlogin al atacante.

    
respondido por el marstato 23.12.2015 - 14:56
fuente
11

Cross-Site-Scripting (XSS) es la ejecución de un código de script definido por el atacante en el contexto de otro sitio. CORS no evita que XSS, de hecho no está relacionado con XSS.

En su lugar, CORS ofrece una manera de debilitar las restricciones existentes en las solicitudes de Ajax (es decir, XMLHTTPRequest) de una manera que se espera que no presente más problemas de seguridad. Tradicionalmente, XMLHTTPRequest estaba restringido para comunicarse dentro del mismo origen, es decir, no era posible enviar una solicitud a algún sitio externo. Esta restricción se realizó para que un atacante no pueda realizar una solicitud entre sitios y obtener el resultado de la solicitud, ya que esto permitiría a un atacante leer datos de los sitios donde los usuarios iniciaron sesión (porque se envían sesión y otras cookies con cada solicitud a un sitio).

Con CORS esta restricción se elimina parcialmente. Ahora es posible enviar un XMLHTTPRequest a otro sitio, pero el resultado solo se puede leer dentro de la aplicación si el sitio remoto agregó explícitamente algunos encabezados CORS que permiten el acceso. Pero, de nuevo, esto no está ejecutando el script en el sitio remoto y, por lo tanto, no está relacionado con XSS.

    
respondido por el Steffen Ullrich 23.12.2015 - 14:48
fuente
1

Otras respuestas son correctas de que XSS y CORS no están directamente relacionados (aunque CORS puede ayudar a limitar el impacto de XSS en el sitio vulnerable).

Básicamente, CORS permite que el código de su sitio web js acceda a su sitio web con las cookies y las credenciales ingresadas en su navegador, mientras que el servidor está protegido de otros js del sitio, y le pide al navegador del cliente que lo acceda (con las credenciales que el usuario ha obtenido).

Esto es cuando se establece Control-Allow-Credentials: true (que permite al navegador enviar cookies y autenticación básica / gssapi / napi). Todavía no estoy seguro de cómo ayuda CORS sin esta opción. Consulte mi pregunta " ¿Debo restringir el origen en una aplicación API? "

    
respondido por el akostadinov 17.12.2017 - 15:59
fuente

Lea otras preguntas en las etiquetas