Kontrolloptionen für Websites (Richtliniendateien)



Um Daten auf einem Webserver auch SWF-Dateien in anderen Domänen zur Verfügung zu stellen, können Sie eine Richtliniendatei auf dem Server erstellen. Eine Richtliniendatei ist eine XML-Datei, die in ein bestimmtes Verzeichnis auf dem Server eingefügt wird.

Richtliniendateien steuern den Zugriff auf verschiedene Datenelemente, einschließlich der Folgenden:

  • Daten in Bitmaps, Sounds und Videos

  • Laden von XML- und Textdateien

  • Importieren von SWF-Dateien aus anderen Sicherheitsdomänen in die Sicherheitsdomäne der ladenden SWF-Datei

  • Zugriff auf Socket- und XML-Socketverbindungen

ActionScript-Objekte instanziieren zwei Arten von Serververbindungen: dokumentbasierte Serververbindungen und Socketverbindungen. ActionScript-Objekte wie Loader, Sound, URLLoader und URLStream instanziieren dokumentbasierte Serververbindungen. Diese Objekte laden eine Datei von einer URL. ActionScript-Socket- und XMLSocket-Objekte stellen Socketverbindungen her, die mit Streaming-Daten anstelle von geladenen Dokumenten arbeiten.

Da Flash Player zwei Arten von Serververbindungen unterstützt, gibt es auch zwei Arten von Richtliniendateien: URL-Richtliniendateien und Socket-Richtliniendateien.
  • Dokumentbasierte Verbindungen erfordern URL-Richtliniendateien. In diesen Dateien wird angegeben, dass die Daten und Dokumente auf dem Server für SWF-Dateien aus bestimmten oder allen Domänen verfügbar sind.

  • Socketverbindungen erfordern Socket-Richtliniendateien, die mithilfe der Socket- und XMLSocket-Klassen einen direkten Netzwerkbetrieb auf der unteren TCP-Socketebene ermöglichen.

Flash Player setzt voraus, dass die Richtliniendateien mit dem gleichen Protokoll übertragen werden, das von der gewünschten Verbindung verwendet wird. Wenn Sie eine Richtliniendatei auf Ihrem HTTP-Server platzieren, können SWF-Dateien aus anderen Domänen Daten von diesem Server als HTTP-Server laden. Wenn Sie jedoch keine Socket-Richtliniendatei auf dem gleichen Server bereitstellen, verbieten Sie SWF-Dateien aus anderen Domänen, eine Verbindung auf Socketebene mit dem Server herzustellen. Anders ausgedrückt, das Verfahren zum Abrufen einer Richtliniendatei muss dem Verbindungsverfahren entsprechen.

In diesem Abschnitt werden Verwendung und Syntax der Richtliniendatei in Bezug auf SWF-Dateien, die für Flash Player 10 veröffentlicht wurden, kurz erläutert. (Die Implementierung von Richtliniendateien in früheren Flash Player-Versionen weicht geringfügig hiervon ab, da in den neueren Versionen die Flash Player-Sicherheit erhöht wurde.) Weitere Informationen zu Richtliniendateien finden Sie im Abschnitt „Richtliniendateiänderungen in Flash Player 9“ des Flash Player Developer Center unter www.adobe.com/go/devnet_security_de.

Master-Richtliniendateien

Flash Player (und AIR-Inhalte, die sich nicht in der AIR-Anwendungs-Sandbox befinden) suchen zuerst im Stammverzeichnis des Servers nach einer URL-Richtliniendatei mit dem Namen crossdomain.xml und dann auf Port 843 nach einer Socket-Richtliniendatei. Eine Datei in einem dieser beiden Speicherorte wird als Master-Richtliniendatei bezeichnet. (Im Falle von Socketverbindungen sucht Flash Player zudem nach einer Socket-Richtliniendatei am gleichen Port wie die Hauptverbindung. Eine an diesem Port gefundene Richtliniendatei gilt jedoch nicht als Master-Richtliniendatei.)

Eine Master-Richtliniendatei kann nicht nur Zugriffsrechte festlegen, sondern auch eine meta-policy-Anweisung enthalten. Eine „meta-policy“-Anweisung gibt an, in welchen Speicherorten Richtliniendateien enthalten sein können. Die standardmäßige „meta-policy“-Anweisung für URL-Richtliniendateien ist „master-only“, d. h. auf dem Server ist ausschließlich die Richtliniendatei „/crossdomain.xml“ zulässig. Die standardmäßige „meta-policy“-Anweisung für Socket-Richtliniendateien ist „all“, d. h. jeder Socket auf dem Host kann als Socket-Richtliniendatei verwendet werden.

Hinweis: In Flash Player 9 und früheren Versionen war die standardmäßige „meta-policy“-Anweisung für URL-Richtliniendateien „all“, sodass alle Verzeichnisse eine Richtliniendatei enthalten konnten. Wenn Sie Anwendungen bereitgestellt haben, die Richtliniendateien aus anderen Speicherorten als der Standarddatei „/crossdomain.xml“ laden, und diese Anwendungen nun in Flash Player 10 ausgeführt werden, müssen Sie (oder der Serveradministrator) die Master-Richtliniendatei so bearbeiten, dass zusätzliche Richtliniendateien zulässig sind. Weitere Informationen zur Angabe eines anderen „meta-policy“-Ausdrucks finden Sie im Abschnitt „Richtliniendateiänderungen in Flash Player 9“ des Flash Player Developer Center unter www.adobe.com/go/devnet_security_de.

Eine SWF-Datei kann durch Aufrufen der Methode Security.loadPolicyFile() auch auf einen anderen Richtliniendateinamen oder ein anderes Verzeichnis prüfen. Wenn die Master-Richtliniendatei jedoch nicht festlegt, dass das Zielverzeichnis Richtliniendateien bereitstellen kann, hat der Aufruf der Methode loadPolicyFile() keine Auswirkung, selbst wenn in diesem Verzeichnis eine Richtliniendatei vorhanden ist. Rufen Sie die Methode loadPolicyFile() auf, bevor Sie Netzwerkoperationen durchführen, die die Richtliniendatei voraussetzen. Flash Player fügt Netzwerkanforderungen automatisch zur Warteschlange hinter den entsprechenden Richtliniendateiversuchen hinzu. Es ist daher zulässig, die Methode Security.loadPolicyFile() unmittelbar vor dem Initiieren einer Netzwerkoperation aufzurufen.

Beim Überprüfen auf eine Master-Richtliniendatei wartet Flash Player drei Sekunden lang auf eine Antwort des Servers. Bleibt die Antwort aus, geht Flash Player davon aus, dass keine Master-Richtliniendatei vorhanden ist. Für Aufrufe der Methode loadPolicyFile() besteht hingegen kein standardmäßiges Zeitlimit. Flash Player geht davon aus, dass die aufgerufene Datei vorhanden ist, und wartet für einen beliebigen Zeitraum, um diese zu laden. Um sicherzustellen, dass die Master-Richtliniendatei geladen wird, sollten Sie diese daher mit der Methode loadPolicyFile() explizit aufrufen.

Der Name der Methode lautet zwar Security.loadPolicyFile(), die Richtliniendatei wird jedoch erst geladen, wenn ein Netzwerkaufruf, der eine Richtliniendatei voraussetzt, ausgegeben wird. Der Aufruf der Methode loadPolicyFile() informiert Flash Player lediglich, wo Richtliniendateien bei Bedarf gesucht werden sollen.

Sie erhalten keine Benachrichtigung, wenn eine Richtliniendateianforderungen initiiert oder abgeschlossen wurde. Hierzu besteht auch keine Notwendigkeit. Flash Player führt Richtlinienüberprüfungen asynchron durch und wartet mit der Initiierung von Verbindungen automatisch, bis die Richtliniendateiüberprüfungen erfolgreich waren.

Die Informationen in den folgenden Abschnitten beziehen sich ausschließlich auf URL-Richtliniendateien. Weitere Informationen zu Socket-Richtliniendateien finden Sie unter Herstellen einer Verbindung mit Sockets.

Umfang einer URL-Richtliniendatei

Eine URL-Richtliniendatei gilt nur für das Verzeichnis, aus dem sie geladen wurde, sowie dessen Unterverzeichnisse. Eine Richtliniendatei im Stammverzeichnis gilt für den gesamten Server, während eine Richtliniendatei, die aus einem anderen Verzeichnis aufgerufen wurde, nur für dieses Verzeichnis und die zugehörigen Unterverzeichnisse gilt.

Eine Richtliniendatei wirkt sich nur auf den Zugriff auf den Server aus, auf dem sie gespeichert ist. Eine Richtliniendatei unter „https://www.adobe.com:8080/crossdomain.xml“ gilt beispielsweise nur für Aufrufe zum Laden von Daten, die an www.adobe.com per HTTPS an Port 8080 gerichtet wurden.

Festlegen von Zugriffsrechten in einer URL-Richtliniendatei

Eine Richtliniendatei enthält ein einziges <cross-domain-policy>-Tag, das wiederum keine oder mehrere <allow-access-from>-Tags enthält. Jedes <allow-access-from>-Tag enthält das Attribut domain, das entweder eine genaue IP-Adresse, eine genaue Domäne oder eine Platzhalterdomäne (beliebige Domäne) festlegt. Platzhalterdomänen können auf zwei Arten angegeben werden:
  • Durch ein einzelnes Sternchen (*) für alle Domänen und IP-Adresse

  • Durch ein Sternchen gefolgt von einem Suffix für die Domänen, die auf das angegebene Suffix enden

Suffixe müssen mit einem Punkt beginnen. Platzhalterdomänen mit Suffixen können jedoch für Domänen stehen, die nur das Suffix, nicht jedoch den Punkt enthalten. Die Domäne „xyz.com“ gilt beispielsweise Bestandteil von „*.xyz.com“. In IP-Domänenspezifikationen sind keine Platzhalter zugelassen.

Im folgenden Beispiel ist eine URL-Richtliniendatei dargestellt, die den Zugriff auf SWF-Dateien gewährt, die aus den Domänen *.example.com, www.friendOfExample.com und 192.0.34.166 stammen:

<?xml version="1.0"?> 
<cross-domain-policy> 
    <allow-access-from domain="*.example.com" /> 
    <allow-access-from domain="www.friendOfExample.com" /> 
    <allow-access-from domain="192.0.34.166" /> 
</cross-domain-policy>

Wenn Sie eine IP-Adresse festlegen, erhalten nur die SWF-Dateien Zugriff, die mit der IP-Syntax von der IP-Adresse geladen wurden (z. B. http://65.57.83.12/flashmovie.swf). SWF-Dateien mit Domänennamensyntax wird kein Zugriff gewährt. Flash Player führt keine DNS-Auflösung durch.

Sie können Zugriff auf Dokumente gewähren, die von einer anderen Domäne stammen. Dies wird im folgenden Beispiel gezeigt:

<?xml version="1.0"?> 
<!-- http://www.foo.com/crossdomain.xml --> 
<cross-domain-policy> 
<allow-access-from domain="*" /> 
</cross-domain-policy>

Jedes <allow-access-from>-Tag verfügt außerdem über das optionale secure-Attribut, das standardmäßig den Wert true annimmt. Wenn sich die Richtliniendatei auf einem HTTPS-Server befindet und Sie möchten, dass SWF-Dateien auf einem Server ohne HTTPS Daten von dem HTTPS-Server laden können, legen Sie den Wert des Attributs auf false fest.

Das Einstellen des secure-Attributs auf false kann sich jedoch nachteilig auf die von HTTPS gewährleistete Sicherheit auswirken. Insbesondere öffnet das Einstellen dieses Attributs auf false sichere Inhalte für Snooping- und Spoofing-Angriffe. Aus diesem Grund wird strikt davon abgeraten, das Attribut secure auf false einzustellen.

Wenn sich die zu landenden Daten auf einem HTTPS-Server befinden, die SWF-Datei, die die Daten lädt, jedoch auf einem HTTP-Server gespeichert ist, sollten Sie die SWF-Datei auf den HTTPS-Server verschieben. Auf diese Weise können Sie für alle Kopien der sicheren Daten den HTTPS-Schutz aufrechterhalten. Entscheiden Sie sich trotzdem dazu, die ladende SWF-Datei auf einem HTTP-Server beizubehalten, fügen Sie das secure="false"-Attribut zu dem <allow-access-from>-Tag hinzu. Dies wird im folgenden Code gezeigt:

<allow-access-from domain="www.example.com" secure="false" /> 
Ein weiteres Element, das Sie zum gewähren des Zugriffs nutzen können, ist das allow-http-request-headers-from-Tag. Dieses Element ermöglicht einem Client, der Inhalte aus einer anderen Berechtigungsdomäne hostet, benutzerdefinierte Header an Ihre Domäne zu senden. während das <allow-access-from>-Tag anderen Domänen die Berechtigung gewährt, Daten aus Ihrer Domäne abzurufen, ermöglicht das allow-http-request-headers-from-Tag anderen Domänen, Daten in Form von Headern an Ihre Domäne zu übertragen. Im folgenden Beispiel sind alle Domänen berechtigt, den SOAPAction-Header an die aktuelle Domäne zu senden:
<cross-domain-policy> 
    <allow-http-request-headers-from domain="*" headers="SOAPAction"/> 
</cross-domain-policy>

Wenn die Anweisung allow-http-request-headers-from in der Master-Richtliniendatei enthalten ist, wird diese auf alle Verzeichnisse des Hosts angewendet. Andernfalls wird sie nur auf das Verzeichnis der Richtliniendatei, die die Anweisung enthält, und dessen Unterverzeichnisse angewendet.

Vorausladen von Richtliniendateien

Das laden von Daten von einem Server sowie das Herstellen einer Verbindung zu einem Socket erfolgen asynchron. Flash Player wartet, bis die Richtliniendatei heruntergeladen wurde, bevor der eigentliche Vorgang ausgeführt wird. Das Extrahieren von Pixeldaten aus Bildern oder von Beispieldaten aus Sounds ist jedoch ein synchroner Vorgang. Die Richtliniendatei muss daher geladen werden, bevor Sie die Daten extrahieren. Geben Sie beim Laden der Medien an, dass nach einer Richtliniendatei gesucht werden soll:

  • Wenn Sie die Loader.load()-Methode verwenden, legen Sie die Eigenschaft checkPolicyFile des context-Parameters fest, bei dem es sich um ein LoaderContext-Objekt handelt.

  • Beim Einbetten eines Bilds in ein Textfeld mit dem <img>-Tag stellen Sie das checkPolicyFile-Attribut des <img>-Tags auf „true" ein. Dies wird im Folgenden gezeigt:

    <img checkPolicyFile = "true" src = "example.jpg">
  • Wenn Sie die Sound.load()-Methode verwenden, legen Sie die Eigenschaft checkPolicyFile des context-Parameters fest, bei dem es sich um ein SoundLoaderContext-Objekt handelt.

  • Wenn Sie die NetStream-Klasse verwenden, legen Sie die Eigenschaft checkPolicyFile des NetStream-Objekts fest.

Wenn Sie einen dieser Parameter einstellen, prüft Flash Player zunächst auf Richtliniendateien, die bereits für diese Domäne heruntergeladen wurden. Anschließend wird die Richtliniendatei im Standardverzeichnis auf dem Server gesucht. Dabei wird sowohl nach <allow-access-from>-Anweisungen als auch nach einer „meta-policy“-Anweisung gesucht. Zum Schluss werden alle ausstehenden Aufrufe der Security.loadPolicyFile()-Methode berücksichtigt, um festzustellen, ob sich diese innerhalb des Gültigkeitsbereichs befinden.