2010-04-16 16 views
6

Ho un filmato Flash, il caricamento dei dati da un URL esterno. In realtà, è un lettore RSS all'interno di un banner.Flash Security.AllowDomain()

Tutto funziona perfettamente quando il filmato Flash e l'URL dei dati si trovano sullo stesso dominio. Tuttavia, se il filmato Flash è su un altro dominio, calci di sicurezza Flash in.

Il manuale dice che mi posso permettere un Security.allowDomain dominio depressione()

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

Ma quando l'ho incorporare il .swf in una pagina HTML, i dati non verranno caricati. Qualche consiglio su come eseguire il debug o risolvere questo?

risposta

3

risolto. Il Adobe Docs spiega il metodo per creare un file chiamato crossdomain.xml nella root della 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> 

Non utilizzare<allow-access-from domain="*" /> perché che permetterà a qualsiasi file SWF su Internet per effettuare chiamate al tuo dominio su per conto dei tuoi utenti con tutti i cookie allegati alle richieste. Questo perderà dati privati ​​a meno che il tuo dominio non li memorizzi o non usi i cookie/l'autenticazione HTTP.

+2

questo consente tutti i domini, che non è raccomandato. Consenti solo domini in stato di bisogno. – Raptor

12

Penso che tu abbia frainteso lo scopo del metodo. Come the docs: dicono, allowDomain:

Lets file file SWF di accedere agli oggetti dominio identificato e variabili nel file SWF che contiene la chiamata allowDomain().

[...]

Chiamando Security.allowDomain ("siteA.com"), siteB.swf dà il permesso siteA.swf script esso.

Così la chiamata che si sta effettuando consente ai file swf su www.mydomain.abc di scambiare lo swf con la chiamata. In pratica stai dicendo: "Mi fido che mi usino correttamente". Non ti consente di fare ciò che stai cercando di fare (caricare risorse da quel dominio).

Non ha senso lasciare che il codice client chieda semplicemente di ignorare la sicurezza tra domini come richiesto. Se tutto ciò che devi fare è chiedere, perché persino avere la regola in primo luogo?

Per fare ciò che si desidera, è possibile utilizzare un file crossdomain.xml su www.mydomain.abc o un proxy sul lato server. In sostanza, il file crossdomain.xml conterrebbe una linea come:

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

, dove www.yourswfdomain.com è il dominio per il file SWF. Ovviamente, questa soluzione richiede il supporto da www.mydomain.abc.

Yahoo ha informazioni su setting up un proxy sul lato server. È mirato a XMLHttpRequest, ma gli stessi principi si applicano a Flash.

+0

Non è immediatamente chiaro dalla documentazione AS3 ma Sicurezza.allowDomain deve essere utilizzato anche quando i file HTML/JS di un dominio stanno tentando di chiamare le funzioni AS3 in un swf incorporato da un dominio diverso. –

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

Non aggiungere http://, è dominio, non URL.

+0

È un dominio, quindi Security.allowDomain ("*. Mydomain.abc") è corretto, non www.mydomain.abc, che è un record HOST. –