2010-04-16 8 views
6

Ich habe einen Flash-Film, der Daten von einer externen URL lädt. Tatsächlich ist es ein RSS-Reader innerhalb eines Banners.Flash Security.AllowDomain()

Alles funktioniert einwandfrei, wenn sich die Flash-Film- und Daten-URL auf derselben Domain befinden. wenn der Flash-Film auf einer anderen Domäne ist jedoch, Flash-Sicherheits Kicks.

Das Handbuch sagt, dass ich eine Domain Trog Security.allowDomain erlauben kann()

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

Aber wenn ich betten die .swf in eine HTML-Seite, werden die Daten nicht geladen. Irgendwelche Tipps, wie man das debuggt oder löst?

Antwort

3

Problem behoben. Die Adobe Docs erklärt die Methode zum Erstellen einer Datei crossdomain.xml in der Wurzel von mydomain.abc genannt

<?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> 

nicht<allow-access-from domain="*" /> Verwenden Sie denn, dass jede SWF im Internet ermöglicht, Anrufe an Ihre Domain auf machen im Namen Ihrer Benutzer mit allen an die Anfragen angehängten Cookies. Dies führt dazu, dass private Daten verloren gehen, es sei denn, Ihre Domain speichert diese nicht oder verwendet keine Cookies/HTTP-Authentifizierung.

+2

Dies erlaubt alle Domänen, was nicht empfohlen wird. Erlaube nur Domains in Not. – Raptor

12

Ich glaube, Sie missverstehen den Zweck der Methode. Als the docs: allowDomain sagen:

SWF-Dateien Dateien in den identifizierten Domänen auf Objekte und Variablen in der SWF-Datei Ermöglicht, die die allowDomain() Aufruf enthält.

[...]

von Security.allowDomain Aufruf ("siteA.com"), siteB.swf gibt siteA.swf Erlaubnis Skript es.

Also der Anruf Sie machen swf-Dateien auf www.mydomain.abc Skript die swf mit dem Anruf. Du sagst im Grunde: "Ich vertraue darauf, dass sie mich richtig benutzen." Sie können nicht das tun, was Sie tun möchten (Ressourcen von dieser Domäne laden).

Es macht keinen Sinn, den Client-Code einfach zu bitten, die domänenübergreifende Sicherheit auf die von Ihnen gewünschte Weise zu umgehen. Wenn Sie nur fragen müssen, warum überhaupt die Regel gilt?

Um zu tun, was Sie wollen, können Sie entweder eine crossdomain.xml Datei auf www.mydomain.abc oder einen serverseitigen Proxy verwenden. Im Wesentlichen würde die crossdomain.xml-Datei eine Zeile beinhalten:

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

, wo www.yourswfdomain.com ist die Domäne der SWF-Datei. Offensichtlich erfordert diese Lösung Unterstützung von www.mydomain.abc.

Yahoo hat Informationen über setting up einen serverseitigen Proxy. Es zielt auf XMLHttpRequest, aber die gleichen Prinzipien gelten für Flash.

+0

Es ist nicht sofort klar aus der AS3-Dokumentation, aber Sicherheit.allowDomain muss auch verwendet werden, wenn HTML/JS-Dateien aus einer Domäne versucht werden, AS3-Funktionen in einem swf aufzurufen, der aus einer anderen Domäne eingebettet ist. –

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

Fügen Sie nicht http://, es ist Domain, nicht url.

+0

Es ist eine Domäne, also ist Security.allowDomain ("*. Mydomain.abc") korrekt, nicht www.mydomain.abc, was ein HOST-Eintrag ist. –