¿Quieres registrarte?

Flash Player 10 - Seguridad en Crossdomain.xml

Por: Martincho7
12 de Diciembre del 2008

Este tip me hizo falta por mucho tiempo y me valió horas y horas de investigación.

En donde trabajo tenemos aplicaciones Flash que he desarrollado, y en su mayoría se alimentan de datos por medio de WebServices. Todo funcionaba impecable hasta que se actualizó a Flash Player 10.

Los datos no eran enviados. Después de buscar mucho, me enteré que la seguridad en esta versión es aún mayor y que el archivo crossdomain.xml tiene que tener algunas modificaciones.

Las modificaciones más importante son la asignación de cual puerto es usado para el traspaso de información y el atributo de seguridad (secure) para paginas HTTPS.

Paso la forma correcta de armar el crossdomain.xml, y que se tenga acceso total al contenido del WebService.

Código :

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" to-ports="*" secure="true" /> 
  <!-- 
 This domain can accept any header from a SWF file on any subdomain of example.com and supports https requests 
  --> 
  <allow-http-request-headers-from domain="*" headers="*" secure="true" /> 
</cross-domain-policy>


También Adobe habla al respecto..

Espero sea de ayuda a alguien que pase por la misma situación.

Saludos
Martín Zarzar

 


También te interesa


Etiquetas flash seguridad cs4 flashplayer

Comentarios | Enviar un comentario
esto solo es afectado con WebServices o tambien con AMF (amfphp o weborb)???
Por: master_of_puppetz
Afecta a toda aplicación que use crossdomain como metodo de autenticación.

Saludos
Martín
Por: Martincho7
me has salvado el videojuego!
Por: gracias tio!-blog
jejej... Merece, era la idea ayudar a otros que "sufran" de lo mismo.

Saludos
Martín
Por: Martincho7
Excelente dato. Lo Máximo Martín
Por: Mezcal-blog
Muy bueno el comentario, aumenta la seguridad en aplicaciones flash.
Por: Danisam-blog
Me siento bien sabiendo que no fui el único que tuvo este inconveniente con la seguridad.

Salu!

Martín
Por: Martincho7
Hola, necesito cambiar los permisos en mi servidor para poder visualizar contenidos RSS cargados por un fichero .swf, y he visto este post, pero no se como hacer ni donde colocar el fichero crossdomain.xml para que funciones, agraceceria su ayuda, gracias de antemano un saludo.
Por: Frank-blog

Frank-blog :

Hola, necesito cambiar los permisos en mi servidor para poder visualizar contenidos RSS cargados por un fichero .swf, y he visto este post, pero no se como hacer ni donde colocar el fichero crossdomain.xml para que funciones, agraceceria su ayuda, gracias de antemano un saludo.


Buenas Frank-blog,

El archivo crossdomain.xml debe ir en la raiz del sitio ej:

Código :

www.elnombredetudominio.com/crossdomain.xml
pero debes tener en cuenta que el RSS al que consultas esta en el mismo servidor. En caso contrario si el RSS esta fuera de tu servidor tienes que pedir que pongan el crossdomain en ese servidor.

Espero haber sido de ayuda.

Saludos
Martín
Por: Martincho7
si muchas gracias
Por: Frank-blog
Hola! el archivo crossdomain.xml fisicamente donde se debe poner.. yo estoy usando Sun One y hay una carpeta donde se ponen los archivos .war exactamente donde debo poner ese xml? yo no uso dominios solo http://ip:puerto/contexto
GRacias!
Por: Cocoliza-blog
por cierto lo probe con Jboss y encontre que se debe poner en la carperta
\jboss\server\default\deploy\jbossweb-tomcat55.sar\ROOT.war\ y si, poniendolo ahi funciono perfectamente, pero no encuentro en donde deba ponerlo para SunOne. saludos!
Por: Cocoliza-blog
Genial!

No sabes las horas de stress mental que me ahorraste!

Gracias!
Por: MickyMike-blog
MMMMMMMMMMMMmmmiiiiiiiillloooooooon de gracias

Me salvaste mi dinerito de la paga jejjeje
graaaaaaaaaaaaaaacias
Por: juan camilo acosta arango
una consulta, tengo mi aplicacion en flex builder y tengo problemas al invocar los web services en otro servidor distinto al que he programado, quiero saber en donde debo poner el archivo crossdomain.xml ???? gracias
Por: yoni-blog
Buenas,

El archivo crossdomain.xml debe ir en el servidor donde corre el webservice.

Saludos
Martín
Por: Martincho7
Hola, yo estoy usando el FileReference para upload imagenes, pero tengo el problema del crossdomain, cosa que con el flash player 9 no tenia. configuré el cross domain.xml como propone Martincho7 pero siempre meda el erro.. :(
Alguien sabeque puede estar pasando??
Por: nigma
Buenas,
Si esta el archivo tal cual publicado y está puesto en la raíz del server a donde haces el Upload tiene que funcionar.
Para despejar dudas cuando lo probas desde Flash al desarrollar funciona? Si da error que error?

Saludos
Martín
Por: Martincho7
recorrí muchos blogs y este articulo fue el mas sencillo y el unico que me resolvio el problemas.. muchas gracias
Por: Jorgge.a-blog
Me alegro Jorgge.a-blog que sea de ayuda.

Saludos
Martín
Por: Martincho7
Gracias men, me salvaste de una!!!!!! Muchas gracias por el dato
Por: Jonatan-blog
lo siento pero no me sirvió... estoy tratando de cargar un xml de un dominio a u data grid que está en otro dominio. He usado el crossdomain.xml que comentas pero no me funciona...
Por: mutiu
Buenas mutiu el crossdomain.xml funciona correctamente pero debe ir en el servidor (o dominio) al cual le solicitas los “datos”.
NO debe estar en el mismo servidor que tienes el SWF, pero seguramente puede pasar que quieras obtener información de un servidor al que no puedas meterle el crossdomain.xml.

(ej: http://www.midominio.com/miflash.swf ===> http://www.yahoo.com/tiempo.xml )

De todas formas tengo un “truquito” que uso a menudo para cuando pasa este problema, pero para poder usarlo tienes que tener PHP en tu servidor.
El truco conciste en usar PHP (proxy.php) para traer los datos desde otro dominio y mostrarlo en una pagina PHP en TU dominio.

El código es el siguente:

Código :

<?php
if (isset($_GET['url'])){
$vfile = $_GET['url'];
$ruta = str_replace("|", "&", $vfile);
}
header("Content-type: text/xml");
readfile($ruta);
?>


Para usarlo desde flash sería algo así:

Código :

http://www.midominio.com/proxy.php?url=http://www.yahoo.com/tiempo.xml

( en caso que existan parámetros en vez de usar "&" usa "|" ej: ....tiempo.xml?par1=ppp|par2=jjj )

De esta forma tu SWF lee una pagina local y no necesita usar el crossdomain.xml en ningún otro lado.

Espero te sirva a ti o cualquiera que pase por aquí.

Saludos
Martín
Por: Martincho7
Todo el código publicado en esta página es vulnerable.

Una política abierta del crossdomain.xml permite, por ejemplo, ataques CSRF.

El script en php que te permite especificar que file quieres leer permite obtener archivos locales.
Por: hkm-blog
También me ha hecho falta cuando entran a mi sitio sin la www :S entonces pongo un crossdomain para permitir accesso desde www.dominio.com y dominio.com :D
Por: leoncitoamx

Por: Carlos-blog
Merece ;) ...me alegra mucho que a tantos meses de crear el Tip aun ayude a colegas.

Saludos
Martín
Por: Martincho7
Funcionó de las mil Maravillas! lo que me costó fue dar con el problema :P
Por: Agustin Amenabar-blog
Como bien dijohkm-blog, todo el código publicado aquí es vulnerable, por no decir hipervulnerable.

En el archivo crossdomain, si se desea leer xml u otros documentos externos al dominio habría que especificar permiso para los puertos 80 y 443 únicamente, ya q el standar son esos puertos y no se m ocurre pensar q yahoo devolvería su xml por un puerto diferente, y sin q lo especifique claro.

El archvo de servidor, en este caso php, debería d enfocarse d otro modo, por ejemplo uno d ellos sería crear un array en el php con los posibles dominios a leer, por ejemplo:
$arDomain=array('https://www.cam.es/','http://www.yahoo.com/');
y en la url del php una variable con el valor de la posición del array q se desee, por ejemplo una varible llamada url, q cuando el swf solicite el script de servidor pida algo como:

dirscript.php?url=1&rute=tiempo.xml

y habría q tratar la varible url en el php de un modo similar a:

readfile($arDomain[$_GET[url]].$_GET[rute]);

Es decir q la url de yahoo debe quedar dentro del php.

Hay mucho más modos de hacerlo un poco más seguro, en cualquier caso recomiendo no usar los script de ejemplo q aquí se exponen, es una invitación a que se apoderen del sistema
Por: unlector-blog
si se ve el código q escribí arriba, es gialmente vulnrable ya que habría q definir antes d read file que sucede si la variable url no se corresponde con un posible valor del array, ya q tal y como está el ejempo anterior si en la url:

dirscript.php?url=1&rute=tiempo.xml

se cambia a:

dirscript.php?url=a&rute=actualdominio.index

como se puede ver es igual de vulnerable, por eso se hace necesario definir algo como:

if($_GET[url]>=0&&$_GET[url]<count($arrDomain)){continue;}else{exit;}
Por: sigoleyendo:)-blog
UUUuu, es lo mas explicito que he encontrado en un ardua busqueda por ese error...
de casualidad saben si no existe un listado de dominios de imagenes publicos donde el corssdomain ya este configurado... lo intente con photobucket .. pero no funciono...
Por: JuAn-Q
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.