Las dichosas Cross Domain Calls

 

Si desarrollas para la web, seguro que alguna vez te has enfrentadoa  una Cross Domain Call :) En este post vamos a ver en que consisten, por qué existen y si hay algún metodo para evitarlas.

¿Qué es una Cross Domain Call?

Es un mecanismo de seguridad de las comunicaciones en navegadores actuales. Evitan que un script (XMLHttpRequest de AJAX) o una aplicación (Flash, Silverlight) de una página web puedan acceder a un servidor web diferente del que residen.

¿Por qué existe?

Intentan ayudar a evitar dos formas habituales de sabotaje en internet, el (1) Cross Site Request Forgery (XSRF o session riding)  y el (2) Cross Site Scripting (XSS).

(1) Un sitio web malicioso y con mala baba suplanta al usuario que esta navegando y accede a otra aplicación en su nombre. Por ejemplo, yo navego a una página malvada y ésta utiliza las cookies de mi navegador para acceder a mi flickr o banca online (o lo que sea) utilizando mis contexto ( https://migaleria/borrar?photoId=3 ).

(2) Un sitio web malicioso y promíscuo me roba información y la envía a un sitio de terceros. XSS Implica que tiene que haber una inyección de Javascript.  Por ejemplo, abro un mensaje malicioso en la intranet y este lee información de mi contexto y la envía a un tercero.

De XSS sabe bastante PHPNuke, debido a la importancia que adquirió el producto hace algunos años, todos los malotes de internet se dedicaron a intentar explotarlo para acceder a sitios en internet. Por desgracia le encontraron fallos de XSS y muchos sitios fueron comprometidos.... coders del mundo!!! que la seguridad no es un añadido, que es un requisito!!

¿Hay formas de evitarlas?

Bien es cierto que aunque sean un mecanismo de protección para el usuario final, a los desarrolladores nos tocan un poquito las narices, no? Pero como dicen las canas... no nos  preocupemos, que menos la muerte, todo tiene solución :) ( hay mashups por ahi, no? )

Tenemos varias opciones para acceder a ese contenido alojado en otro servidor desde el browser donde se ejecuta nuestra aplicación, veamos las más habituales:

Proxy

Hacemos que el script o la aplicación llamen a un proxy del servicio remoto que hemos puesto en nuestro servidor web. De modo que si yo quiero información de twitter, en lugar de llamar desde Silverlight al servicio de twitter, lo que haré será llamar a un servicio web que esté en mi servidor y desde este servicio web alojado en el backend, llamar al servicio de twitter.

CrossDomain.xml   y ClientAccessPolicy.xml

Son archivos que van a indicar que el servidor ajeno a nuestra aplicación confía en las llamadas. De modo que siguiendo con lo de twitter... si estos archivos están presentes en el sevidor de twitter, y permiten acceso a nuestro dominio, podremos acceder desde las aplicaciones cliente, por ejemplo

twitter.com/crossdomain.xml  - static.flickr.com/crossdomain.xml

Para Silverlight en MSDN How to- Make a Service Available Across Domain Boundaries

En otro post veremos ejemplos específicos a Silverlight y ASP.NET AJAX :)

Más información sobre las Cross Domain Calls en MSDN ( Client Side Cross-Domain Security )

https://code.msdn.microsoft.com/xdsecuritywp/Release/ProjectReleases.aspx?ReleaseId=1157

Hapy Hacking!!

  Ds