Limitazioni delle API di connettività di rete

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

È possibile limitare le API per la connettività di rete in due modi. Per impedire attività pericolose, viene bloccato l'accesso alle porte che sono in genere riservate; non è possibile usare il codice per forzare questi blocchi. Per controllare l'accesso di un file SWF alle funzionalità di rete in riferimento alle altre porte, potete utilizzare l'impostazione allowNetworking .

Porte bloccate

Come accade ad alcuni browser, anche Flash Player e Adobe AIR hanno delle limitazioni in riferimento all'accesso HTTP ad alcune porte. Le richieste HTTP non sono autorizzate su alcune porte standard che vengono utilizzate convenzionalmente per i server di tipo non HTTP.

Tutte le API che accedono all'URL della rete sono soggette a tali limitazioni. Le uniche eccezioni sono costituite dalle API che chiamano direttamente i socket, come Socket.connect() e XMLSocket.connect() , e dalle chiamate a Security.loadPolicyFile() con cui viene caricato un file di criteri socket. Le connessioni socket sono consentite o negate attraverso l'uso di file di criteri socket sul server di destinazione.

Nell'elenco seguente sono riportate le API di ActionScript 3.0 a cui si applica il blocco delle porte:

FileReference.download(), FileReference.upload() , Loader.load() , Loader.loadBytes() , navigateToURL() , NetConnection.call() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , sendToURL() , Sound.load() , URLLoader.load() , URLStream.load()

Il blocco delle porte è applicato anche all'importazione della librerie condivise, all'uso del tag <img> nei campi di testo e al caricamento di file SWF nelle pagine HTML tramite i tag <object> e <embed> .

Il blocco delle porte è applicato anche all'uso del tag <img> nei campi di testo e al caricamento di file SWF nelle pagine HTML tramite i tag <object> e <embed> .

Nell'elenco seguente sono riportate le porte bloccate:

HTTP: 20  (dati ftp), 21 (controllo ftp)

HTTP e FTP: 1 (tcpmux), 7 (echo), 9 (discard), 11 (systat), 13 (daytime), 15 (netstat), 17 (qotd), 19 (chargen), 22 (ssh), 23 (telnet), 25 (smtp), 37 (time), 42 (name), 43 (nicname), 53 (domain), 77 (priv-rjs), 79 (finger), 87 (ttylink), 95 (supdup), 101 (hostriame), 102 (iso-tsap), 103 (gppitnp), 104 (acr-nema), 109 (pop2), 110 (pop3), 111 (sunrpc), 113 (auth), 115 (sftp), 117 (uucp-path), 119 (nntp), 123 (ntp), 135 (loc-srv / epmap), 139 (netbios), 143 (imap2), 179 (bgp), 389 (ldap), 465 (smtp+ssl), 512 (print / exec), 513 (login), 514 (shell), 515 (printer), 526 (tempo), 530 (courier), 531 (chat), 532 (netnews), 540 (uucp), 556 (remotefs), 563 (nntp+ssl), 587 (smtp), 601 (syslog), 636 (ldap+ssl), 993 (ldap+ssl), 995 (pop3+ssl), 2049 (nfs), 4045 (lockd), 6000 (x11)

Uso del parametro allowNetworking

Potete controllare l'accesso di un file SWF alle funzionalità di rete impostando il parametro allowNetworking dei tag <object> e <embed> nella pagina HTML in cui si trova il contenuto SWF.

I valori possibili di allowNetworking sono:

  • "all" (predefinito): tutte le API di connettività sono ammesse nel file SWF.

  • "internal" : il file SWF non può chiamare le API di navigazione o interazione del browser (riportate più avanti in questa sezione), ma può chiamare qualunque altra API di connettività di rete.

  • "none" : il file SWF non può chiamare le API di navigazione o interazione del browser (riportate più avanti in questa sezione) e non può utilizzare le API di comunicazione tra file SWF, anch'esse descritte più avanti.

Il parametro allowNetworking è progettato per essere utilizzato principalmente quando il file SWF e la pagina HTML in cui è contenuto appartengono a domini differenti. Si sconsiglia di utilizzare i valori "internal" e "none" quando il file SWF da caricare proviene dallo stesso dominio delle pagine HTML che lo contengono, in quanto non è possibile garantire che il file SWF venga sempre caricato insieme alla pagina HTML prevista. Un file SWF potrebbe essere caricato da un dominio senza la pagina HTML che lo contiene e in questo caso la limitazione del parametro allowNetworking non funzionerebbe come previsto.

La chiamata di un'API non consentita provoca un'eccezione SecurityError.

Aggiungete il parametro allowNetworking e impostatene il valore nei tag <object> ed <embed> nella pagina HTML che contiene un riferimento al file SWF, come illustrato nell'esempio seguente:

<object classic="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
    Code base="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0"  
    width="600" height="400" ID="test" align="middle"> 
<param name="allowNetworking" value="none" /> 
<param name="movie" value="test.swf" /> 
<param name="bgcolor" value="#333333" />  
<embed src="test.swf" allowNetworking="none" bgcolor="#333333"  
    width="600" height="400" 
    name="test" align="middle" type="application/x-shockwave-flash"  
    pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
</object>

Una pagina HTML può anche usare uno script per generare tag di incorporamento SWF. Dovete modificare lo script in modo da inserire le impostazioni allowNetworking corrette. Le pagine HTML generate da Adobe Flash Professional e Adobe Flash Builder utilizzano la funzione AC_FL_RunContent() per incorporare riferimenti a file SWF. Aggiungete allo script le impostazioni del parametro allowNetworking come indicato di seguito:

AC_FL_RunContent( ... "allowNetworking", "none", ...)

Le seguenti API sono disabilitate quando allowNetworking è impostato su "internal" :

navigateToURL() , fscommand() , ExternalInterface.call()

Oltre alle API elencate sopra, le seguenti API sono disabilitate quando allowNetworking è impostato su "none" :

sendToURL() , FileReference.download() , FileReference.upload() , Loader.load() , LocalConnection.connect() , LocalConnection.send() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , SharedObject.getLocal() , SharedObject.getRemote() , Socket.connect() , Sound.load() , URLLoader.load() , URLStream.load() , XMLSocket.connect()

Anche se l'impostazione allowNetworking selezionata consente a un file SWF di utilizzare un'API di connettività di rete, potrebbero essere attive altre restrizioni dovute ai limiti della sandbox di sicurezza (vedete Sandbox di sicurezza ).

Se allowNetworking è impostato su "none" , non è possibile fare riferimento a file multimediali esterni in un tag <img> nella proprietà htmlText di un oggetto TextField (viene generata un'eccezione SecurityError).

Se allowNetworking è impostato su "none" , un simbolo appartenente a una libreria condivisa importata inserito in Flash Professional (non in ActionScript) viene disabilitato in fase di runtime.