Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Cross domain per il Flash Player

Strutturare il file crossdomain.xml e le opzioni che mette a disposizione
Strutturare il file crossdomain.xml e le opzioni che mette a disposizione
Link copiato negli appunti

Capita di dover caricare file o dei dati da domini esterni rispetto a quello in cui si trova il file SWF: in questi casi è necessario utilizzare un file che regoli l'accesso alle informazioni del dominio esterno, che di default non risultano accessibili da parte del Flash Player per motivi di sicurezza.

Il Flash Player prevede un apposito file atto a questo compito, il file crossdomain.xml, che viene posizionato nella root del dominio oppure in una cartella: nel primo caso le impostazioni varranno per tutto il sito, altrimenti varranno solo per la cartella dove si trova il file; ovviamente è necessario avere accesso al dominio "esterno" rispetto all'SWF.

In questo articolo vedremo come strutturare il file crossdomain.xml e le opzioni che mette a disposizione, anche in considerazione dell'update alla sicurezza del Flash Player datato Aprile 2008.

Struttura del file

Il file crossdomain è un normale file XML, con una struttura peraltro molto semplice e composta di base da pochi tag: la "base" del file crossdomain.xml è come la seguente:

Listato 1. Base del file crossdomain

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>

</cross-domain-policy>

All'interno del tag <cross-domain-policy> potremo inserire le varie opzioni necessarie per personalizzare il comportamento del file crossdomain e per consentire o negare l'accesso da determinate fonti. Questo tag è invece il tag principale del file, per cui non ha attributi.

Attributi e tag utilizzabili

I tag utilizzabili nel file cross domain all'interno del tag <cross-domain-policy> sono tre:

  • site-control;
  • allow-access-from;
  • allow-http-request-header-from.

Ognuno di questi tag ha diversi attributi che permettono di regolare in maniera più o meno restrittiva l'accesso alle informazioni.

Il tag site-control

Come abbiamo già detto, la posizione del file all'interno del dominio influisce sui permessi del file SWF, infatti un file crossdomain posto nella root del sito avrà impostazioni valide per tutte le directory del dominio, mentre un file posto all'interno di una cartella avrà validità solo al suo interno; il file posto nella root del sito viene definito Master policy file e solamente in questo caso è possibile usare il tag <site-control>.

Questo tag permette di regolare eventuali file crossdomain "alternativi", ovvero qualora fosse necessario usare un file diverso da quello principale (il master policy file) tramite l'uso del <site-control> possiamo regolare l'uso dei policy file "secondari". Cerchiamo di capire meglio i passaggi:

  • il file SWF manda la richiesta al dominio esterno;
  • il dominio controlla se è necessario usare il master policy file oppure un policy fie "secondario";
  • se è necessario usare un file "secondario", viene controllato se l'accesso a tale file è consentito dal tag <site-control>;
  • se l'uso del file secondario è consentito viene analizzato, altrimenti viene generato un errore.

Questo tag prevede un solo attributo, permtted-cross-domain-policies, che stabilisce quali file possano essere caricati. I possibili valori per questo attributo sono cinque:

  • none - Nessun file è utilizzabile dall'SWF, nemmeno il master policy file;
  • master-only - Soltanto il master policy file è utilizzabile dall'SWF;
  • by-content-type - Solo i file che hanno come content-type text/x-cross-domain-policy sono accessibili;
  • by-ftp-filename - Solo i file con nome crossdomain.xml sono accessibili dall'SWF;
  • all - Tutti i policy file sono accessibli dal file SWF.

Il valore di default è master-only, va detto che nella maggioranza dei casi è sufficiente usare il file master e quindi l'utilizzo degli altri attributi è piuttosto raro.

Il tag allow-access-from

Questo è il tag che possiamo definire più importante, infatti viene utilizzato per consentire l'accesso alle informazioni da uno o più domini; è possibile associare un solo dominio ad ogni tag <allow-access-from>, a meno di non usare il carattere jolly rappresentato dall'asterisco (*), che permette eventualmente di includere più domini o sottodomini con una sola riga.

L'attributo principale di questo tag è domain, che serve per specificare il dominio da cui consentire l'accesso ai dati; altri attributi sono to-ports, utilizzato per consentire la connessione da più porte e secure che se impostato a true stabilisce che un file in HTTPS possa garantire l'accesso anche da sorgenti HTTP (il valore di default per questo parametro è false).

Nota: nel caso in cui il tag allow-access-from si trovi su un file diverso dal master policy file, le sue impostazioni varranno per la directory in cui si trova e per tutte le sue sottodirectory, ma non saranno valide per le cartelle superiori. Possiamo quindi dire che ogni file crossdomain agisce sulla cartella in cui è memorizzato e in tutte le relative sottocartelle, ovviamente quando il file si trova nella root del sito diventa valido per tutto il dominio dato che coinvolge tutte le cartelle e sottocartelle.

Il file crossdomain meno restrittivo è quello proposto di seguito, vediamo infatti che l'attributo domain ha come valore * (ovvero qualsiasi dominio) mentre secure è impostato su false.

Listato 2. Crossdomain poco restrittivo

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" secure="false"/>
</cross-domain-policy>

Ovviamente un file di questo tipo va utilizzato solo se pensiamo di offrire un servizio accessibile a qualsiasi utente, altrimenti è assolutamente consigliato impostare i domini a cui vogliamo consentire il caricamento dei dati. Nel file seguente, ad esempio, i file SWF provenienti da esempio.it e www.esempio.it potranno caricare i dati dal dominio in cui abbiamo memorizzato il file crossdomain.

Listato 3. Crossdomail limitato ad alcuni domini

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
  <allow-access-from domain="esempio.it"/>
  <allow-access-from domain="www.esempio.it" />
</cross-domain-policy>

Qualora volessimo consentire l'accesso da qualsiasi dominio e sottodominio di esempio.it, il nostro file potrebbe essere cambiato in questo modo:

Listato 4. Crossdomain per un dominio e tutti sottodomini

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
  <allow-access-from domain="*.esempio.it"/>
</cross-domain-policy>

Utilizzando il carattere jolly in questa posizione consentiamo l'accesso da esempio.it, www.esempio.it, sottodominio.esempio.it, ecc, non consentiremo invece l'accesso da domini come esempio.net, www.esempio.net, www.sito.it.

Nel caso di connessioni tramite socket è possibile utilizzare l'attributo to-ports. Le porte possono essere indicate separate da una virgola, eventualmente è possibile indicare un range di porte usando il trattino (-) tra di esse. Per esempio il codice seguente consente l'accesso dal dominio www.esempio.it alle porte dalla 516 alla 523 (comprese).

Listato 5. Cross domain limitato su porte e dominio

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
<allow-access-from domain="*.example.com" to-ports="507,516-523"/>
</cross-domain-policy>

Il tag allow-http-request-headers-from

Questo tag ha attributi e funzionamento simile a quanto visto per l'allow-access-from, la differenza principale è che questo tag viene utilizzato per consentire il passaggio di particolari header tra i domini, infatti in questo tag abbiamo l'attributo headers, che ci permette di limitare le intestazioni che possono essere inviate al dominio. Anche in questo caso possiamo usare il carattere jolly asterisco, inoltre possiamo stabilire più header in una sola riga poichè è possibile inserire più intestazioni in un singolo tag, separandole tramite l'uso della virgola. Funzionano invece esattamente come per il tag allor-access-from gli attributi domain e secure.

Listato 6. Crossdomain con il passaggio di header

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
<allow-http-request-headers-from domain="*.esempio.it" headers="prova,esempio,test*" />
</cross-domain-policy>

In questo caso qualsiasi dominio e sottodominio di esempio.it potrà mandare gli header prova, esempio o qualsiasi header che inizi con test, possiamo infatti notare l'uso dell'asterisco che sta a significare in questo caso "test seguito da qualsiasi combinazione di caratteri".

Nota: anche per il tag allow-http-request-headers-from vale il discorso fatto per il tag allow-access-from riguardo alla posizione del file e ai permessi su directory e sottodirectory.

Ti consigliamo anche