Restrição de APIs de rede

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

APIs de rede podem ser restringidas de duas maneiras. Para impedir atividades mal-intencionadas, o acesso a portas comumente reservadas é bloqueado. Você não pode substituir esses bloqueios em seu código. Para controlar o acesso de um arquivo SWF à funcionalidade da rede com relação a outras portas, é possível usar a configuração allowNetworking .

Portas bloqueadas

O Flash Player e o Adobe AIR têm restrições sobre o acesso HTTP a determinadas portas, assim como navegadores. Solicitações HTTP não são permitidas para determinadas portas padrão que convencionalmente são usadas para tipos de servidores não HTTP.

Qualquer API que acesse uma URL da rede está sujeita a essas restrições de bloqueio de porta. A única exceção são APIs que chamam soquetes diretamente, como Socket.connect() e XMLSocket.connect() , ou chamadas para Security.loadPolicyFile() nas quais um arquivo de política de soquete está sendo carregado. Conexões de soquete são permitidas ou negadas por meio do uso de arquivos de política de soquete no servidor de destino.

A lista a seguir mostra as APIs do ActionScript 3.0 às quais se aplica o bloqueio de portas:

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

O bloqueio de portas também se aplica à importação da Biblioteca compartilhada, ao uso da tag <img> em campos de texto e ao carregamento de arquivos SWF em uma página HTML usando as tags <object> e <embed> .

O bloqueio de portas também se aplica ao uso da tag <img> em campos de texto e ao carregamento de arquivos SWF em uma página HTML usando as tags <object> e <embed> .

As listas a seguir mostram quais portas são bloqueadas:

HTTP: 20  (dados ftp), 21 (controle 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 do parâmetro allowNetworking

É possível controlar o acesso de um arquivo SWF à funcionalidade da rede definindo o parâmetro allowNetworking nas tags <object> e <embed> na página HTML que contém o conteúdo do SWF.

Os valores possíveis de allowNetworking são:

  • "all" (o padrão) — todas as APIs de rede têm permissão no arquivo SWF.

  • "internal" — o arquivo SWF não pode chamar APIs de interação de navegador ou navegação de navegador, listadas posteriormente nesta seção, mas ele pode chamar quaisquer outras APIs de rede.

  • "none" — o arquivo SWF não pode chamar APIs de interação de navegador ou de navegação de navegador, listadas posteriormente nesta seção, e não pode usar quaisquer APIs de comunicação SWF com SWF, também listadas posteriormente.

O parâmetro allowNetworking foi projetado para uso principalmente quando o arquivo SWF e a página HTML que o delimita estão em domínios diferentes. O uso do valor de "internal" ou de "none" não é recomendado quando o arquivo SWF que está sendo carregado é do mesmo domínio que as páginas HTML que o delimitam, porque não é possível garantir que um arquivo SWF sempre seja carregado com a página HTML pretendida. Partes não confiáveis podem carregar um arquivo SWF do seu domínio sem HTML delimitado, em cujo caso a restrição allowNetworking não funcionará como pretendido.

A chamada de uma API impedida lança uma exceção SecurityError.

Adicione o parâmetro allowNetworking e defina seu valor nas tags <object> e <embed> da página HTML que contém uma referência ao arquivo SWF, conforme mostrado neste exemplo:

<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>

Uma página HTML também pode usar um script para gerar tags de incorporação SWF. É necessário alterar o script para que ele insira as configurações corretas de allowNetworking . As páginas HTML geradas pelo Adobe Flash Professional e pelo Adobe Flash Builder usam a função AC_FL_RunContent() para incorporar referências aos arquivos SWF. Adicione as configurações do parâmetro allowNetworking ao script, como no seguinte:

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

As seguintes APIs são impedidas quando allowNetworking está definido como "internal" :

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

Além das APIs da lista anterior, as seguintes APIs também são impedidas quando o parâmetro allowNetworking está definido como "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()

Mesmo que a configuração allowNetworking selecionada permita que um arquivo SWF use uma API de rede, pode haver outras restrições com base nas limitações da caixa de proteção de segurança (consulte Caixas de proteção de segurança ).

Quando allowNetworking está definido como "none" , não é possível fazer referência a mídia externa em uma tag <img> na propriedade htmlText de um objeto TextField (uma exceção SecurityError é lançada).

Quando allowNetworking está definido como "none" , um símbolo de uma biblioteca compartilhada importada adicionado no Flash Professional (não no ActionScript) é bloqueado em tempo de execução.