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