Per impostazione predefinita, il runtime cerca un file di criteri socket sulla porta 843. Come per i file di criteri URL, questo file viene chiamato il
file di criteri principale
.
Quando i file di criteri sono stati introdotti per la prima volta in Flash Player 6, i file di criteri socket non erano supportati. Le connessioni ai server socket venivano autorizzate da un file di criteri contenuto nel percorso predefinito di un server HTTP collegato alla porta 80 dello stesso host del server socket. Questa funzionalità è ancora supportata da Flash Player 9, ma non da Flash Player 10. In Flash Player 10, solo i file di criteri socket possono autorizzare le connessioni socket.
Come per i file di criteri degli URL, anche i file di criteri socket prevedono un'istruzione meta-policy per indicare le porte che gestiscono i file di criteri. Tuttavia, invece che essere riservato solo ai file principali, il metacriterio predefinito per i file di criteri socket è impostato per tutti i file. Ciò significa che, a meno che il file di criteri principale non preveda impostazioni più restrittive, Flash Player presuppone che qualunque socket dell'host è disponibile per un file di criteri socket.
L'accesso alle connessioni socket e socket XML è disattivato per impostazione predefinita, anche se il socket a cui vi collegate si trova nello stesso dominio del file SWF. Per consentire l'accesso a livello dei socket, è necessario gestire un file di criteri socket da una delle seguenti posizioni:
-
porta 843 (posizione del file di criteri principale);
-
la stessa porta della connessione socket principale;
-
una porta diversa da quella della connessione socket principale.
Per impostazione predefinita, Flash Player cerca un file di criteri socket sulla porta 843 e sulla stessa porta della connessione socket principale. Se intendete gestire un file di criteri socket da una porta diversa, il file SWF deve chiamare il metodo
Security.loadPolicyFile()
.
Un file di criteri socket ha la stessa sintassi di un file di criteri degli URL, ad eccezione del fatto che è necessario specificare anche le porte su cui autorizza l'accesso. Un file dei criteri socket gestito da una porta con numero inferiore a 1024 può autorizzare l'accesso a qualsiasi porta; un file proveniente da una porta 1024 o superiore può autorizzare l'accesso solo alle porte 1024 e superiori. Le porte consentite vengono specificate in un attributo
to-ports
del tag
<allow-access-from>
. Sono consentiti i numeri di porta singoli, gli intervalli di porte e i caratteri jolly.
Segue un esempio di un file di criteri socket:
<?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>
Per recuperare un file di criteri socket dalla porta 843 o sulla stessa porta della connessione socket principale, chiamate il metodo
Socket.connect()
o
XMLSocket.connect()
. Flash Player prima controlla la presenza di un file di criteri principale sulla porta 843. Se ne trova uno, verifica se il file contiene un'istruzione meta-policy che proibisce i file di criteri socket sulla porta di destinazione. Se l'accesso è consentito, Flash Player cerca nel file di criteri principale l'istruzione
allow-access-from
appropriata. Se non la trova, cerca un file di criteri socket sulla stessa porta della connessione socket principale.
Per recuperare un file di criteri socket da un percorso diverso, prima chiamate il metodo
Security.loadPolicyFile()
con la sintassi speciale
"xmlsocket"
, come illustrato di seguito:
Security.loadPolicyFile("xmlsocket://server.com:2525");
Chiamate il metodo
Security.loadPolicyFile()
prima del metodo
Socket.connect()
o
XMLSocket.connect()
. Flash Player attenderà fino al completamento della richiesta di recupero del file di criteri prima di acconsentire o meno l'accesso alla connessione principale. Tuttavia, se il file di criteri principale indica che il percorso di destinazione non può gestire file di criteri, la chiamata al metodo
loadPolicyFile()
non produce risultati anche se in quel percorso è effettivamente presente un file di criteri.
Se implementate un server socket e dovete fornire un file di criteri socket, dovete decidere se fornire il file di criteri utilizzando la stessa porta che accetta connessioni principali o se utilizzare un'altra porta. In entrambi i casi, il server deve attendere la prima trasmissione dal vostro client prima di poter inviare una risposta.
Quando Flash Player richiede un file di criteri, viene sempre trasmessa la seguente stringa non appena si stabilisce una connessione:
<policy-file-request/>
Quando il server riceve la stringa, il file di criteri può essere trasmesso. Sia la richiesta di Flash Player che la risposta del server devono sempre concludersi con un byte null.
Non è possibile riutilizzare la stessa connessione per la richiesta di un file di criteri e per la connessione principale; la connessione deve essere chiusa dopo la trasmissione del file di criteri. In caso contrario, Flash Player chiude la connessione per la trasmissione del file di criteri prima di riconnettersi per l'impostazione della connessione principale.