2010-04-16 10 views
6

Tengo una película Flash, cargando datos desde una URL externa. De hecho, es un lector de RSS dentro de un banner.Flash Security.AllowDomain()

Todo funciona perfectamente cuando la película Flash y la URL de datos están en el mismo dominio. Sin embargo, si la película Flash está en otro dominio, patadas en la seguridad de Flash.

El manual dice que puedo permitir que un security.allowDomain a través de dominio()

system.Security.allowDomain("http://www.mydomain.abc/") 
xmlData = new XML(); 
xmlData.ignoreWhite = true; 
xmlData.onLoad = loadXML; 
xmlData.load("http://www.mydomain.abc/content.php"); 

Pero cuando lo integrar el .swf en una página HTML, los datos no se cargarán. ¿Algún consejo sobre cómo depurar o resolver esto?

Respuesta

3

Se arregló. El Adobe Docs explica el método para crear un archivo llamado crossdomain.xml en la raíz de mydomain.abc

<?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="www.domain-of-swf.com" /> 
</cross-domain-policy> 

No utilice<allow-access-from domain="*" /> porque permitirá que cualquier SWF en el Internet para hacer llamadas a su dominio en nombre de sus usuarios con todas las cookies adjuntas a las solicitudes. Esto filtrará datos privados a menos que su dominio no los almacene o no use cookies/Autenticación HTTP.

+2

esto permite todos los dominios, lo cual no es recomendable. Permitir solo dominios con necesidad. – Raptor

12

Creo que está malinterpretando el propósito del método. Como the docs: dicen, allowDomain:

Permite a los archivos SWF archivos en los objetos de acceso dominios identificados y variables en el archivo SWF que contiene la llamada allowDomain().

[...]

Llamando Security.allowDomain ("siteA.com"), siteB.swf da permiso siteA.swf a la escritura misma.

Así que la llamada que está realizando permite swf archivos en www.mydomain.abc script el swf con la llamada. Básicamente estás diciendo: "Confío en que me usen correctamente". No le permite hacer lo que intenta hacer (cargar recursos de ese dominio).

No tiene sentido permitir que el código del cliente simplemente solicite eludir la seguridad entre dominios de la manera que lo solicita. Si todo lo que tienes que hacer es preguntar, ¿por qué incluso tener la regla en primer lugar?

Para hacer lo que quiera, puede usar un archivo crossdomain.xml en www.mydomain.abc, o un proxy del lado del servidor. En esencia, el archivo crossdomain.xml contendría una línea como:

<allow-access-from domain="www.yourswfdomain.com" /> 

, donde www.yourswfdomain.com es el dominio del archivo SWF. Obviamente, esta solución requiere soporte de www.mydomain.abc.

Yahoo tiene información sobre setting up un proxy del lado del servidor. Está dirigido a XMLHttpRequest, pero los mismos principios se aplican a Flash.

+0

No está inmediatamente claro en la documentación de AS3, sino en Seguridad.También se debe usar allowDomain cuando los archivos HTML/JS de un dominio intentan llamar a las funciones de AS3 en un swf incrustado desde un dominio diferente. –

3
system.Security.allowDomain("www.mydomain.abc") 

No agregue http://, es de dominio, no url.

+0

Es un dominio, por lo que Security.allowDomain ("*. Mydomain.abc") es correcto, no www.mydomain.abc, que es un registro HOST. –