Flash Player tiene importantes características de seguridad que intentan limitar los posibles usos negativos que se puedan hacer de él, tales como impedir que otros SWFs poco seguros puedan leer variables en nuestra aplicación, prevenir ataques XSS, o simplemente evitar que bugs no detectados puedan resultar peligrosos.
Esto hace que haya que tener muy en cuenta las restricciones de seguridad de las aplicaciones que manejamos, lo cual no es del todo fácil, ya que el tema de seguridad en el Flash Player da para mucho. En esta ocasión cubriré un problema específico que tuvimos en cristalab al cambiar el dominio de los foros, separándolo del del resto del sitio (pasando de cristalab.com/foros a foros.cristalab.com).
Cuando intentábamos acceder a este tip de M@U desde la nueva url del foro veíamos que saltaba el siguiente error de seguridad, que podía verse con la versión debugger del Flash Player:
SecurityError: Error #2122: Violación de la seguridad Sandbox: LoaderInfo.content: http://www.cristalab.com/images/tips/actionscript/suavizar-imagenes/smoothRotate.swf## no puede acceder a http://foros.cristalab.com/images/tips/actionscript/suavizar-imagenes/Example.jpg. Se requiere un archivo de política, pero el indicador checkPolicyFile no se definió al cargar este medio.
at flash.display::LoaderInfo/get content()
at smoothRotate_fla::MainTimeline/load_Complete()
Sin embargo, se podía acceder con normalidad desde la url de la sección de tips, y desde el propio SWF, ambos situados en el mismo servidor que la imagen.
Lo primero que hicimos fue añadir un archivo crossdomain.xml, pero vimos que que el error persistía. Así que tocaba leer la documentación al respecto y ver donde más fallaba.
Encontré que Flash permite cargar imágenes desde cualquier dominio, sin que sea necesario un crossdomain. Sin embargo, no permita acceder a la propiedad content del loader, ni formar un objeto BitmapData con la imagen tal como en el tip de M@U. Para eso sí es necesario el crossdomain.xml, formado tal como se indica aquí. Pero además, tenemos que decirle a flash que busque el archivo de seguridad antes de cargar la imagen, y eso lo hacemos mediante la propiedad checkPolicyFile de un objeto LoaderContext que pasamos como parámetro de loader.load:
Código :
var loader:Loader = new Loader (); var req:URLRequest = new URLRequest ("http://servidor_externo.com/url_de_mi_imagen.jpg"); var context:LoaderContext = new LoaderContext() context.checkPolicyFile = true; loader.load (req , context);
De esta manera nos aseguramos de que al cargar la imagen flash busque un archivo crossdomain.xml que le dé permiso para acceder al bitmap del archivo cargado.
Cabe señalar que esto no es válido para archivos swf, que se manejan mediante Security.allowDomain().
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Lo bueno es que lo solucionamos pronto, y que se encontró la manera de solucionarlo... Muy buen Tip Zah!
Por bipsa el 07 de Enero de 2009
Código :
Por Raxiro el 07 de Enero de 2009
Por Rubencho176 el 07 de Enero de 2009
Por Martincho7 el 09 de Enero de 2009
Saludos
Martín Zarzar
Por fredybg el 09 de Enero de 2009
Me resuelve muchas inquietudes, gracias
Por Samar el 28 de Enero de 2009
Chevere
Por claudia el 31 de Agosto de 2009
Por Quantium el 27 de Octubre de 2009
Lo cual impide desarrollar aplicaciones utilizando imágenes de facebook y pv3d sin utilizar alguna teconología de servidor(como php) que replique las imágenes
Por Noel Beltran el 24 de Noviembre de 2009
Por redribera el 14 de Abril de 2010
Por riback el 27 de Abril de 2010
Por enreda el 29 de Abril de 2010
Por aSnO el 26 de Mayo de 2011
Por Mxeeee el 29 de Diciembre de 2011
Por Alancran777 el 28 de Febrero de 2014