flex, air, adobe

22.01.08

Problemas de Seguridad en Flex (Crossdomain)

Posted in flex at 23:21

En el post anterior publiqué como hacer peticiones REST, más en concreto, al servicio web que nos ofrecía MyStrands. Desarrollando la aplicación en mí casa todo iba muy bien y sin problemas. El verdadero problema surgió cuando subí la aplicación a mi servidor de hosting e intentaba ejecutar la aplicación descargándomela desde el.

La aplicación se iniciaba con normalidad, pero cuando realizaba una petición de información al servicio web de MyStrands me aparecía el siguiente problema: Error #2048. Violación de Seguridad del Sandbox: No se pueden cargar datos del sitio https://mystrands.com…. desde www.antonioserrano.es/…, a lo cual dije ¿¿Pero que coj…..??

 Buscando por mil millones de páginas de google, consultándo la documentación de adobe, etc, etc. descubrí que una aplicación descargada desde un sitio web (por ejemplo el mío), no puede ejecutar código que está en otro (por ejemplo el de mystrands). Si buscáis como solucionar este tema os encontraréis mucho con el famoso fichero crossdomain.xml e intrucciones del tipo Security.allowDomain() y Security.allowInsecureDomain(). Estas soluciones están bien si lo que quieres es interactuar con otra aplicación en flex, la cual deberá cargar el fichero de política de accesos (el crossdomain.xml), con la instrucción Security.loadPolicyFile(), y además incluir las instrucciones de Security para permitirnos el acceso.

Pero, ¿Y si no quieres interactuar con otra aplicación flex y quieres invocar un servicio web o algo similar? Pues tras mucho, mucho buscar no he encontrado solución directa. Para el ejemplo anterior lo que tuve que hacer fue incluir en mi servidor una página en php, a la cual yo llamo desde flex y ésta a su vez llama al servicio de mystrands y me devuelve el xml resultante. Es decir, una persona se descarga mi aplicación desde mi servidor, y la única forma de que funcione las llamadas es, realizarlas contra mi servidor, y que mi servidor las realice a mystrands a modo de proxy.

Para mi ejemplo de mystrands, utilicé este archivo php, que me hizo Miguel (un autentico crack, al cual le agradezco mucho su ayuda). Yo utilicé este archivo porque mi servidor es php, pero por ejemplo, se puede utilizar un servlet, página en asp o lo que sea.

Un saludo!! PD: si alguien sabe como resolver el problema sin necesidad de utilizar ninguna pagina de servidor intermedia se lo agradeceré muchísimo

7 comentarios »

  1. Dario said,

    14.08.08 at 13:37

    Efectivamente, con esta logica que mecionoas funcionan los lectores de rss, yo hice un lector de rss enflash con esta logica con un xml intermedio es muy util, pero no se porque el tema de los web services no es como tu mencionas deberia de ser asi, me estoy topando con el problema que mencionas y tener a disposicion semejante heramienta como es flex que tenga esta limitacion conlos web services es absurdo

    saludos

  2. RodriguitoEsparza said,

    15.12.08 at 20:00

    Buen día, al leer tu publicación me vino a la mente que tal vez tu puedas ayudarme. Realicé una aplicación web con flex y .NET utilizando MySql; al tener la aplicación en mi máquina local todo funciona normalmente y muy bien, pero al momento de subir la aplicación al servidor de hosting no pude hacer que me contestara los servicios el flex (digo flex porque me imagino que es algo de configuración del flex o fluorine, y la verdad no tengo mucha experiencia a fondo sobre flex :p ). El error que me muestra es :

    Client.Error.MessageSend Send failed Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 500: url: ‘http://www.ferreteriagalvez.com/FerreteriaGalvez/Gateway.aspx’

    Ese error me sale en mi computadora local cuando intento ingresar a la aplicación con login y password y no tengo registrado como directorio virtual el sitio, al momento de crearlo como directorio virtual en el iis todo funciona normalmente, más al subir la aplicación al hosting no encontré la manera de asignar la carpeta de directorio virtual, además, vi que la aplicación flex.

    la página de prueba es http://www.ferreteriagalvez.com (aunque yo ahorita ya no participo quiero saber como hacer funionar una aplicación así :| ) Espero me puedas ayudar o alguno de tus compañeros.

    Muchas gracias por cualquier respuesta.

  3. RodriguitoEsparza said,

    09.01.09 at 15:57

    Buen día, nuevamente escribo para preguntar si tienes alguna idea sobre mi problema, el problema es ya cuando tengo la aplicación en el web hosting, me dice que no se puede conectar a http://www.ferreteriagalvez.com/FerreteriaGalvez/Gateway.aspx , el archivo está directamente en la carpeta raiz del web hosting pero esta carpeta no se llama FerreteriaGalvez se llama ramsesrosetta, y según he visto con mis pruebas locales, al configurar el proyecto de flex que el contextroot es /FerreteriaGalvez siempre necesita un directorio virutal llamado así aunque utilice ese proyecto de flex en uno de .net llamado FerreteriaGalvezPub, entonces, lo que yo creo es que en el web hosting debe existir un directorio virtual llamado FerreteriaGalvez para que pueda funcionar mi aplicación ¿es correcto?, pienso que la carpeta root que se llama ramsesrosetta debería llamarse FerreteriaGalvez, ¿así es?.

    Espero haberme explicado bien, la dirección de la aplicación es http://www.ferreteriagalvez.com y el error ocurre cuando se ingresan usuario y contraseña y se da clic en el botón de entrar.

    Ojalá puedas ayudarme o alguno de tus colaboradores, o si sabes de alguna persona que pueda guiarme te lo agradeceré mucho.

    Gracias.

  4. German said,

    14.01.09 at 20:52

    No se si sera de utilidad a esta altura, pero bueno, tambien me tope con este error y en un link de Adobe: http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html encontre la solucion, (al menos en mi caso funciona). lo unico que he tenido que hacer fue crear el famoso archivo “crossdomain.xml” y alojarlo en el root de mi servidor web. El contenido del archivo es:

    Bueno, espero les sea de utilidad, ya que me simplifico la vida.
    Por si ayuda, en mi caso utilizo Flex con WebService PHP + NuSoap.

    Exitos…

  5. RodriguitoEsparza said,

    14.01.09 at 21:04

    Pues muchas gracias, por la ayuda, más debo comentar que mi problema ya lo solucioné, e intentaré dar la solución; que por lo visto no fue un problema de seguridad.

    Mi aplicación está hecha con Flex, .NET 2.0, MySql y fluorinefx.

    lo que ocurre es que al configurar el proyecto de flex se indica un context.root y por el ejemplo de flourinefx se debe colocar como context.root la carpeta del proyecto de .net, digamos, si el web site de .Net se llama flexypuntonet el context.root debía ser /flexypuntonet; entonces al momento de que en la máquina local si existe la carpeta con los archivos de confguración pues funciona correctamete, pero al momento de publicar en el webhosting la carpeta flexypuntonet no existe y como los archivos de publicación se suben a la carpeta root del web hosting nunca funcionaría con esta configuración (es lo que yo supongo por lo que pasó), para solucionarlo, en la configuración del proyecto de flex al momento de asignar el context.root asigné simplemente el directorio raiz quedando -context.root / así se tomarán los archivos de configuración del directorio raiz y ya no se necesitan archivos extra.

    Espero haberme explicado bien y que sea de utilidad.

    No está de más comentar que un anterior problema fue que la dll de MySql.dll para el acceso a datos no aceptaba funcionalidad en Trust level medium ( o algo así ), y para solucionar eso, encontré una dll de MySql.dll configurada para admitir esa solución. no recuerdo la liga exacta pero se encuentra en google.

    Saludos.

  6. Gil said,

    11.02.10 at 20:39

    hola que tal RodriguitoEsparza,

    Me encuentro con el mismo problema que tu, solo que en mi caso el error que me arroja flex sobre la libreria mysql. Me podrias echar una mano y enviarme la libreria, el link o en su defecto pasarme tu mail para contactarte.

    gil_luevano@hotmail.com

  7. yacteka said,

    08.09.10 at 6:39

    buen articulo gracias

RSS feed for comments on this post · TrackBack URL

Leave a Comment