Caricamento di dati

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Il contenuto Flash Player e AIR può scambiare dati con i server. Il caricamento dei dati è un'operazione differente dal caricamento di file multimediali, in quanto le informazioni caricate vengono visualizzate come oggetti programma, anziché essere riprodotte come file multimediali. In generale, il contenuto può caricare dati dallo stesso dominio da cui è stato originato. Tuttavia, per caricare dati da altri domini il contenuto richiede in genere file di criteri (vedete la sezione Controlli del sito Web (file di criteri) ).

Nota: il contenuto in esecuzione nella sandbox dell'applicazione AIR non risiede mai in un dominio remoto (a meno che lo sviluppatore non importi intenzionalmente contenuto remoto nella sandbox dell'applicazione), pertanto non può partecipare ai tipi di attacchi da cui proteggono i file di criteri. Il contenuto AIR nella sandbox dell'applicazione non è soggetto a limitazioni per quanto riguarda il caricamento di dati tramite file di criteri. Tuttavia, il contenuto AIR in altre sandbox è soggetto alle limitazioni qui descritte.

Uso di URLLoader e URLStream

È possibile caricare dati, quali file XML o file di testo. I metodi load() delle classi URLLoader e URLStream sono controllati da autorizzazioni di file di criteri degli URL.

Se usate il metodo load() per caricare contenuto da un dominio diverso da quello del codice che chiama il metodo, il runtime verifica la presenza di un file di criteri degli URL sul server delle risorse caricate. Se il file di criteri degli URL è presente e garantisce l'accesso al dominio del contenuto che si sta caricando, è possibile procedere al caricamento dei dati.

Connessione a socket

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.

Protezione dei dati

Per proteggere i dati da eavesdropping e alterazioni mentre viaggiano su Internet, potete utilizzare TLS (Transport Layer Security) o SSL (Socket Layer Security) sul server di origine dei dati. Potete quindi connettere il server utilizzando il protocollo HTTPS.

Nelle applicazioni create per AIR 2 o versioni successive, potete anche proteggere le comunicazioni socket TCP. La classe SecureSocket consente di iniziare una connessione socket a un server socket che utilizza TLS versione 1 o SSL versione 4.

Invio di dati

L'invio di dati si verifica quando il codice invia dati a un server o risorsa. L'invio di dati è sempre consentito per il contenuto di un dominio di rete. Un file SWF locale può inviare dati a indirizzi di rete solo se si trova nella sandbox locale affidabile, locale con rete o dell'applicazione AIR. Per ulteriori informazioni, vedete Funzioni di sicurezza sandbox locali .

È possibile utilizzare la funzione flash.net.sendToURL() per inviare dati a un URL. Vi sono anche altri metodi per inviare richieste a URL. Tra essi vi sono metodi di caricamento, quali Loader.load() e Sound.load() e metodi di caricamento dati, quali URLLoader.load() e URLStream.load() .

Caricamento e scaricamento di file

Il metodo FileReference.upload() avvia il caricamento di un file selezionato da un utente su un server remoto. Dovete chiamare il metodo FileReference.browse() o FileReferenceList.browse() prima di chiamare il metodo FileReference.upload() .

Il codice che chiama il metodo FileReference.browse() o FileReferenceList.browse() può essere chiamato solo in risposta a un evento associato al mouse o alla tastiera. Se viene chiamato in altre situazioni, con Flash Player 10 e versioni successive viene generata un'eccezione. Tuttavia, un evento utente non è richiesto per chiamare questi metodi dalla sandbox dell'applicazione AIR.

La chiamata al metodo FileReference.download() apre una finestra di dialogo nella quale è possibile scaricare un file da un server remoto.

Nota: nei server che richiedono l'autenticazione dell'utente solo i file SWF in esecuzione in un browser (ovvero quelli che utilizzano il plug-in per il browser o il controllo ActiveX) possono fornire una finestra di dialogo per richiedere all'utente di immettere un nome utente e una password per l'autenticazione, e solo per gli scaricamenti. Flash Player non consente il caricamento su server che richiedono l'autenticazione utente.

Le operazioni di caricamento e scaricamento non sono consentite se il file SWF che effettua la chiamata si trova nella sandbox locale con file system.

Per impostazione predefinita, un file SWF non può avviare un caricamento su o uno scaricamento da un server diverso dal proprio. Un file SWF può eseguire operazioni di caricamento su o scaricamento da server differenti, se tale server contiene un file di criteri degli URL in grado di concedere l'autorizzazione di accesso al dominio del file SWF richiedente.