Standaard zoekt de runtime een socketbeleidsbestand dat wordt aangeleverd vanaf poort 843. Net als bij URL-beleidsbestanden wordt dit bestand het
hoofdbeleidsbestand
genoemd.
Toen beleidsbestanden voor het eerst in Flash Player 6 werden geïntroduceerd, was er geen ondersteuning voor socketbeleidsbestanden. Verbindingen met socketservers werden toegestaan door een beleidsbestand op de standaardlocatie op een HTTP-server via poort 80 van dezelfde host als de socketserver. Flash Player 9 ondersteunt deze functie nog wel, Flash Player 10 niet. In Flash Player 10 kunnen socketverbindingen alleen door socketbeleidsbestanden worden geautoriseerd.
Socketbeleidsbestanden ondersteunen, net als URL-beleidsbestanden, een metabeleidsinstructie waarin staat welke poorten beleidsbestanden kunnen leveren. In plaats van "master-only" is het standaardmetabeleid voor socketbeleidsbestanden "all". Dat wil zeggen, dat tenzij het hoofdbeleidsbestand een striktere instelling opgeeft, Flash Player ervan uitgaat dat elke socket op de host een socketbeleidsbestand kan aanleveren.
Toegang tot socket- en XML-socketverbindingen is standaard uitgeschakeld, zelfs als de socket waarmee u verbinding maakt in hetzelfde domein is als het SWF-bestand. U kunt toegang op socketniveau toestaan door een socketbeleidsbestand aan te leveren uit een van de volgende locaties:
-
Poort 843 (de locatie van het hoofdbeleidsbestand)
-
De poort van de hoofdsocketverbinding
-
Een andere poort dan de hoofdsocketverbinding
Standaard zoekt Flash Player naar een socketbeleidsbestand op poort 843 en op dezelfde poort als de hoofdsocketverbinding. Als u een socketbeleidsbestand van een andere poort wilt aanleveren, moet het SWF-bestand
Security.loadPolicyFile()
aanroepen.
Een socketbeleidsbestand heeft dezelfde syntaxis als een URL-beleidsbestand, maar moet ook opgeven aan welke poorten toegang wordt toegewezen. Wanneer een beleidsbestand van een poortnummer lager dan 1024 afkomstig is, kan het beleidsbestand toegang verlenen tot alle andere poorten. Wanneer een beleidsbestand van poort 1024 of hoger afkomstig is, kan het beleidsbestand alleen toegang verlenen tot de poorten 1024 en hoger. De toegestane poorten worden in het attribuut
to-ports
in de tag
<allow-access-from>
opgegeven. Afzonderlijke poortnummers, poortbereiken en jokertekens zijn toegestane waarden.
Dit is een voorbeeld van een socketbeleidsbestand:
<?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>
Als u een socketbeleidsbestand van poort 843 wilt ophalen of van dezelfde poort als een hoofdsocketverbinding, roept u de methode
Socket.connect()
of
XMLSocket.connect()
aan. Flash Player controleert eerst of er een hoofdbeleidsbestand aanwezig is op poort 843. Als het er een vindt, wordt gecontroleerd of het bestand een metabeleidsinstructie bevat die socketbeleidsbestanden op de doelpoort verbiedt. Als toegang niet verboden is, zoekt Flash Player eerst naar de juiste instructie
allow-access-from
in het hoofdbeleidsbestand. Als er geen wordt gevonden, zoekt het naar een socketbeleidsbestand op dezelfde poort als de hoofdsocketverbinding.
Als u een socketbeleidsbestand van een andere locatie wilt ophalen, roept u eerst de methode
Security.loadPolicyFile()
aan met de speciale
"xmlsocket"
-syntaxis, als in het volgende voorbeeld:
Security.loadPolicyFile("xmlsocket://server.com:2525");
Roep eerst de methode
Security.loadPolicyFile()
aan en vervolgens de methode
Socket.connect()
of
XMLSocket.connect()
. Flash Player wacht tot het verzoek om het beleidsbestand is afgehandeld, waarna wordt vastgesteld of de hoofdverbinding al dan niet mag worden gebruikt. Als het hoofdbeleidsbestand echter aangeeft dat de doellocatie geen beleidsbestanden mag aanleveren, heeft de aanroep naar
loadPolicyFile()
geen effect, zelfs als er op die locatie een beleidsbestand aanwezig is.
Als u bezig bent met de implementatie van een socketserver en u een bestand met socketbeleid beschikbaar wilt stellen, is het belangrijk te bepalen of u het bestand wilt aanbieden via de poort voor hoofdverbindingen of via een andere poort. In beide gevallen moet de server wachten op de eerste transmissie van de client voordat u een reactie verzendt.
Als Flash Player een beleidsbestand aanvraagt, wordt na het tot stand brengen van de verbinding altijd de volgende tekenreeks verzonden:
<policy-file-request/>
Op het moment dat de server deze tekenreeks ontvangt, kan het bestand worden verzonden. Het verzoek van Flash Player wordt altijd afgesloten met een null-byte en de reactie van de server moet ook worden afgesloten met een null-byte.
Het is niet mogelijk dezelfde verbinding te gebruiken voor het aanvragen van een beleidsbestand en als hoofdverbinding. U moet de verbinding sluiten nadat het beleidsbestand is verzonden. Als u dat niet doet, sluit Flash Player de verbinding voor de aanvraag voordat de hoofdverbinding tot stand wordt gebracht.