Intercambio de recursos de origen cruzado

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 12 de noviembre de 2020; la verificación requiere 21 ediciones .

El intercambio de recursos de origen cruzado ( CORS ; del  inglés  -  "compartir recursos entre diferentes fuentes") es una tecnología de navegadores modernosque le permite proporcionar páginas web con acceso a recursos de otro dominio .

La esencia de la tecnología CORS

Hay tres dominios que le permiten descargar recursos del servidor U. Para que esto sea posible, el servidor web U, que proporciona el contenido , solo necesita especificar una lista de dominios confiables en Access-Control-Allow-Origin encabezado de respuesta : A, B, C. Entonces para las páginas de estos dominios , no se aplicarán las restricciones del principio del mismo origen en las páginas solicitadas:

Access-Control-Allow-Origin: A, B, C

Después de eso, las páginas de los dominios A, B, C podrán descargar contenido del servidor U.

Para PHP , esto se hace llamando a la función header():

<?php header ( "Access-Control-Allow-Origin: http://example.com" ); ?>

Ejemplo de uso

Para inicializar una solicitud de origen cruzado , el navegador del cliente agrega una indicación de Origen ( el dominio del sitio desde el que se origina la solicitud) a la solicitud HTTP . Por ejemplo, la página http://www.a.com/page.html intenta obtener datos de la página http://www.b.com/cors.txt. Si el navegador del cliente es compatible con la tecnología CORS, la solicitud se verá así:

OBTENER /cors.txt HTTP/1.1 Anfitrión: www.b.com Origen: www.a.com

Si el servidor www.b.com permite recibir datos de www.a.com, la respuesta del servidor contendrá la línea:

Acceso-Control-Permitir-Origen: http://www.a.com

Si falta esta línea en la respuesta del servidor , un navegador compatible con la tecnología CORS devolverá un código de error en lugar de datos.

En caso de que el servidor quiera permitir el acceso a páginas de cualquier dominio , puede especificar en la respuesta:

Acceso-Control-Permitir-Origen: *

Si el servidor desea permitir el acceso a más de un dominio , la respuesta del servidor debe contener una línea Access-Control-Allow-Origin para cada dominio .

Acceso-Control-Permitir-Origen: http://www.a.com Acceso-Control-Permitir-Origen: http://www.b.com Acceso-Control-Permitir-Origen: http://www.c.com

En la práctica, se utiliza más a menudo un registro de varios dominios , separados por un espacio [1] :

Acceso-Control-Permitir-Origen: http://www.a.com http://www.b.com http://www.c.com

Relación entre CORS y JSONP

La tecnología CORS se puede utilizar como una alternativa más moderna y confiable a JSONP , ya que le permite aprovechar al máximo XMLHttpRequest y, a diferencia de JSONP, no es vulnerable a la inyección SQL . . Por otro lado, la tecnología CORS requiere un soporte especial en el código del navegador , mientras que JSONP no depende de este.

Compatibilidad con navegador

  • Gecko 1.9.1 ( Firefox 3.5 [2] , SeaMonkey 2.0) y superior.
  • WebKit ( Safari 4 y superior [3] , Google Chrome 3 y superior [4] , posiblemente antes).
  • MSHTML/Trident 6.0 ( Internet Explorer 10 ) tiene soporte integrado [5] , MSHTML/Trident 4.0 y 5.0 ( Internet Explorer 8 y 9) proporciona soporte parcial a través del objeto XDomainRequest. Los navegadores Internet Explorer 10 y 11, según los informes de errores disponibles [6] , no son compatibles con CORS para nombres de dominio internacionalizados ( IDN ) que contienen caracteres no latinos.
  • Navegadores Presto (Opera) CORS está implementado en Opera 12.00 [7] y Opera Mobile 12, pero no en Opera Mini.

Notas

  1. Intercambio de recursos de origen cruzado . Consultado el 22 de noviembre de 2013. Archivado desde el original el 6 de marzo de 2017.
  2. Control de acceso HTTP (CORS) - HTTP | MDN . Fecha de acceso: 24 de febrero de 2014. Archivado desde el original el 21 de febrero de 2014.
  3. xmlhttprequest entre sitios con CORS ✩ Mozilla Hacks: el blog para desarrolladores web . Consultado el 24 de febrero de 2014. Archivado desde el original el 11 de septiembre de 2019.
  4. Copia archivada (enlace no disponible) . Fecha de acceso: 24 de febrero de 2014. Archivado desde el original el 19 de julio de 2012. 
  5. Tony Ross, administrador de programas, Internet Explorer. CORS para XHR en IE10 . MSDN (9 de febrero de 2012). Consultado el 2 de diciembre de 2015. Archivado desde el original el 5 de diciembre de 2015.
  6. El navegador no reconoce Access-Control-Allow-Origin si es un dominio IDN - Microsoft Edge Development (enlace descendente) . desarrollador.microsoft.com. Consultado el 18 de septiembre de 2016. Archivado desde el original el 19 de septiembre de 2016. 
  7. Opera: Opera 12.00 para UNIX Changelog (enlace descendente) . Consultado el 24 de febrero de 2014. Archivado desde el original el 18 de junio de 2012. 

Literatura

  • Monsur Hossain. CORS en acción: creación y consumo de API de origen cruzado. - Compañía de Publicaciones Manning, 2014. - 240 p. - ISBN 978-1-61729-182-1 .
  • Mike Shema. Hackeo de aplicaciones web: detección y prevención de problemas de seguridad de aplicaciones web. - Novedad, 2012. - P. 3-6. — ISBN 978-1-59749-951-4 .