Standardmäßig sucht die Laufzeit nach einer Socket-Richtliniendatei, die an Port 843 bereitgestellt wird. Wie bei URL-Richtliniendateien wird diese Datei als
Masterrichtliniendatei
bezeichnet.
Als Richtliniendateien in Flash Player 6 eingeführt wurden, gab es noch keine Unterstützung für Socket-Richtliniendateien. Verbindungen mit Socketservern wurden von einer Richtliniendatei am Standardspeicherort auf einem HTTP-Server an Port 80 auf dem gleichen Host wie der Socketserver autorisiert. Diese Funktion wird in Flash Player 9 noch unterstützt, nicht jedoch in Flash Player 10. In Flash Player 10 können ausschließlich Socket-Richtliniendateien Socketverbindungen autorisieren.
Socket-Richtliniendateien unterstützen ähnlich wie URL-Richtliniendateien eine „meta-policy“-Anweisung, die angibt, welche Ports Richtliniendateien bereitstellen können. Die standardmäßige „meta-policy“-Anweisung für Socket-Richtliniendateien ist jedoch „all“, nicht „master-only“. Flash Player geht somit davon aus, dass jedes Socket auf dem Host eine Socket-Richtliniendatei bereitstellen kann, sofern die Master-Richtliniendatei keine strikteren Einstellungen festlegt.
Der Zugriff auf Socket- und XML-Socketverbindungen ist standardmäßig deaktiviert, selbst wenn sich das Socket, zu dem Sie eine Verbindung herstellen möchten, in der gleichen Domäne wie die SWF-Datei befindet. Um den Zugriff auf Socketebene zuzulassen, müssen Sie eine Socket-Richtliniendatei in einem der folgenden Speicherorte bereitstellen:
-
Port 843 (Speicherort der Master-Richtliniendatei)
-
Der gleiche Port wie die Socket-Hauptverbindung
-
Ein anderer Port als die Socket-Hauptverbindung
Flash Player sucht standardmäßig an Port 843 sowie an dem Port der Socket-Hauptverbindung nach einer Socket-Richtliniendatei. Wenn Sie eine Socket-Richtliniendatei an einem anderen Port bereitstellen möchten, muss die SWF-Datei die Methode
Security.loadPolicyFile()
aufrufen.
Eine Socket-Richtliniendatei weist die gleiche Syntax wie eine URL-Richtliniendatei auf, sie gibt jedoch zusätzlich die Ports an, für die Zugriff gewährt wird. Wenn eine Socket-Richtliniendatei von einer Portnummer unter 1024 bereitgestellt wird, kann sie Zugriff auf beliebige Ports gewähren. Stammt sie dagegen von Port 1024 oder höher, kann sie nur Zugriff auf Port 1024 und höher gewähren. Die zulässigen Ports werden in einem
to-ports
-Attribut im
<allow-access-from>
-Tag angegeben. Einstellige Portnummern, Portbereiche und Platzhalterzeichen sind zulässig.
Im Folgenden finden Sie ein Beispiel für eine Socket-Richtliniendatei:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://socks.mysite.com -->
<cross-domain-policy>
<allow-access-from domain="*" to-ports="507" />
<allow-access-from domain="*.example.com" to-ports="507,516" />
<allow-access-from domain="*.example.org" to-ports="516-523" />
<allow-access-from domain="adobe.com" to-ports="507,516-523" />
<allow-access-from domain="192.0.34.166" to-ports="*" />
</cross-domain-policy>
Um eine Socket-Richtliniendatei an Port 843 oder dem gleichen Port wie die Socket-Hauptverbindung abzurufen, rufen Sie die Methode
Socket.connect()
oder
XMLSocket.connect()
auf. Flash Player sucht zunächst eine Master-Richtliniendatei an Port 843. Wenn eine Master-Richtliniendatei gefunden wird, überprüft Flash Player, ob die Datei eine „meta-policy“-Anweisung enthält, die Socket-Richtliniendateien am Zielport untersagt. Ist der Zugriff zulässig, sucht Flash Player in der Master-Richtliniendatei zunächst nach der zugehörigen
allow-access-from
-Anweisung. Wird keine Master-Richtliniendatei gefunden, sucht Flash Player am gleichen Port wie die Socket-Hauptverbindung nach einer Socket-Richtliniendatei.
Um eine Socket-Richtliniendatei aus einem anderen Speicherort abzurufen, müssen Sie zunächst die Methode
Security.loadPolicyFile()
mit der speziellen
"xmlsocket"
-Syntax aufrufen. Dies wird im folgenden Beispiel gezeigt:
Security.loadPolicyFile("xmlsocket://server.com:2525");
Rufen Sie die Methode
Security.loadPolicyFile()
auf, bevor Sie die
Socket.connect()
- oder
XMLSocket.connect()
-Methode aufrufen. In diesem Fall wartet Flash Player, bis Ihre Richtliniendateianforderung erfüllt wurde. Erst dann entscheidet es, ob Ihre Hauptverbindung zugelassen wird. Wenn die Master-Richtliniendatei jedoch festlegt, dass das Zielverzeichnis keine Richtliniendateien bereitstellen kann, hat der Aufruf der Methode
loadPolicyFile()
keine Auswirkung, selbst wenn in diesem Verzeichnis eine Richtliniendatei vorhanden ist.
Wenn Sie einen Socketserver implementieren und eine Socket-Richtliniendatei bereitstellen müssen, entscheiden Sie, ob die Richtliniendatei an dem gleichen Port bereitgestellt werden soll, der Hauptverbindungen akzeptiert, oder ob Sie einen anderen Port verwenden möchten. In beiden Fällen muss der Server auf die erste Übertragung vom Client warten, bevor er eine Antwort sendet.
Wenn Flash Player eine Richtliniendatei anfordert, überträgt es nach dem Herstellen der Verbindung immer zuerst den folgenden String:
<policy-file-request/>
Erst nachdem der Server diesen String empfangen hat, kann er die Richtliniendatei senden. Die Anforderung von Flash Player wird immer durch ein Nullbyte beendet und die Antwort des Servers muss ebenfalls auf ein Nullbyte enden.
Erwarten Sie nicht, dass die gleiche Verbindung für die Richtliniendateianforderung und die Hauptverbindung verwendet wird. Sie müssen die Verbindung nach Übertragung der Richtliniendatei schließen. Andernfalls schließt Flash Player die Verbindung für die Richtliniendatei, bevor die Hauptverbindung eingerichtet wird.