Carregamento de dados

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

O conteúdo do Flash Player e do AIR podem trocar dados com servidores. O carregamento de dados é um tipo de operação diferente do carregamento de mídia porque as informações carregadas aparecem como objetos em vez de serem exibidas como mídia. Geralmente, o conteúdo pode carregar dados do mesmo domínio de origem do conteúdo. No entanto, o conteúdo geralmente exige arquivos de política para carregar dados de outros domínios (consulte Controles de site (arquivos de política) ).

Nota: O conteúdo executado na área de segurança do AIR nunca é servidor a partir de um domínio remoto (a não ser que o desenvolvedor importe intencionalmente o conteúdo remoto para a área de segurança), de forma que ele não participe da proteção contra ataques fornecida pelos arquivos de política. O conteúdo do AIR na área de segurança do aplicativo não está restrito a carregar dados por meio de arquivos de política. No entanto, o conteúdo AIR em outras áreas de segurança está sujeito às restrições descritas.

Uso de URLLoader e URLStream

É possível carregar dados, como um arquivo XML ou um arquivo de texto. Os métodos load() das classes URLLoader e URLStream são governados pelas permissões do arquivo de política de URL.

Se você usar o método load() para carregar conteúdo de um domínio diferente daquele do código que está chamando o método, o tempo de execução verificará se existe um arquivo de política de URL no servidor dos ativos carregados. Se houver um arquivo de política e ele conceder acesso ao domínio do conteúdo que está sendo carregado, você poderá carregar os dados.

Conexão a soquetes

Por padrão, o tempo de execução procura um arquivo de política de soquete servido na porta 843. Assim como os arquivos de política de URL, esse arquivo é chamado de arquivo de política mestre .

Quando arquivos de política foram introduzidos no Flash Player 6 pela primeira vez, não havia suporte para arquivos de política de soquete. Conexões a servidores de soquete eram autorizadas por um arquivo de política no local padrão em um servidor HTTP na porta 80 do mesmo host que o servidor de soquete. O Flash Player 9 ainda oferece suporte a essa capacidade, mas o Flash Player 10 não oferece. No Flash Player 10, apenas arquivos de política de soquete podem autorizar conexões de soquete.

Como os arquivos de política de URL, os arquivos de política de soquete oferecem suporte a uma instrução de metapolítica que especifica quais portas podem servir arquivos de política. No entanto, em vez de “master-only”, a metapolítica padrão para arquivos de política de soquete é “all”. Isto é, a menos que o arquivo de política mestre especifique uma configuração mais restritiva, o Flash Player assumirá que qualquer soquete no host pode servir um arquivo de política de soquete.

O acesso a conexões de soquete XML e a soquete está desativado por padrão, mesmo que o soquete que você está conectando esteja no mesmo domínio que o arquivo SWF. É possível permitir acesso em nível de soquete servindo um arquivo de política de segurança de qualquer um dos seguintes locais:

  • Porta 843 (o local do arquivo de política mestre)

  • A mesma porta que a conexão de soquete principal

  • Uma porta diferente da conexão de soquete principal

Por padrão, o Flash Player procura um arquivo de política de soquete na porta 843 e na mesma porta que a conexão de soquete principal. Se desejar servir um arquivo de política de soquete em uma porta diferente, o arquivo SWF deverá chamar Security.loadPolicyFile() .

Um arquivo de política de soquete tem a mesma sintaxe que um arquivo de política de URL, exceto que ele também deve especificar as portas às quais ele concede acesso. Quando um arquivo de política de soquete é servido em uma porta com número inferior a 1024, ele pode conceder acesso a qualquer porta. Quando um arquivo de política é proveniente da porta 1024 ou superior ele só pode conceder acesso a portas 1024 e superiores. As portas permitidas são especificadas em um atributo to-ports na tag <allow-access-from> . Os valores de números de portas únicos, intervalos de portas e curingas são aceitos.

Este é um exemplo de arquivo de política de soquete:

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

Para recuperar um arquivo de política de soquete da porta 843 ou da mesma porta como uma conexão de soquete principal, chame o método Socket.connect() ou XMLSocket.connect() . O Flash Player primeiro verifica se há um arquivo de política mestre na porta 843. Se um arquivo de política mestre for localizado, ele verificará se o arquivo contém uma instrução de metapolítica que proíbe arquivos de política de soquete na porta de destino. Se o acesso não for proibido, o Flash Player primeiro procurará a instrução allow-access-from apropriada no arquivo de política mestre. Se uma instrução não for localizada, ele procurará um arquivo de política de soquete na mesma porta que a conexão de soquete principal.

Para recuperar um arquivo de política de soquete de um local diferente, primeiro chame o método Security.loadPolicyFile() com a sintaxe especial "xmlsocket" , como no seguinte:

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Chame o método Security.loadPolicyFile() antes de chamar o método Socket.connect() ou XMLSocket.connect() . O Flash Player então aguarda até que tenha atendido sua solicitação de arquivo de política antes de decidir se permite sua conexão principal. No entanto, se o arquivo de política mestre especificar que o local de destino não pode servir arquivos de política, a chamada para loadPolicyFile() não terá nenhum efeito, mesmo que haja um arquivo de política naquele local.

Se estiver implementando um servidor de soquetes e precisar fornecer um arquivo de política de soquete, decida se o arquivo de política deve ser fornecido usando a mesma porta que aceita conexões principais ou usando uma porta diferente. Em qualquer dos casos, o servidor deve aguardar a primeira transmissão de seu cliente antes de enviar uma resposta.

Quando o Flash Player solicita um arquivo de política, ele sempre transmite a string a seguir assim que a conexão é estabelecida:

<policy-file-request/>

Quando o servidor recebe essa string, ele pode transmitir o arquivo de política. A solicitação do Flash Player sempre é terminada por um byte nulo e a resposta do servidor também deve ser terminada por um byte nulo.

Não espere reutilizar a mesma conexão para uma solicitação de arquivo de política e para uma conexão principal. Feche a conexão depois de transmitir o arquivo de política. Se isso não for feito, o Flash Player fechará a conexão do arquivo de política antes de reconectar-se para configurar a conexão principal.

Protegendo dados

Para proteger o vazamento de dados e alterações durante o transporte na Internet, é possível utilizar Transport Layer Security (TLS) ou Socket Layer Security (SSL) no servidor de origem dos dados. É possível estabelecer uma conexão com o servidor utilizando o protocolo HTTPS.

Em aplicativos criados no AIR 2 ou superior, você também pode proteger as comunicações do soquete TCP. A classe SecureSocket permite que você inicie uma conexão com um servidor de soquete que utiliza TLS versão 1 ou SSL versão 4.

Envio de dados

O envio de dados ocorre quando o código envia dados para um servidor ou recurso. O envio de dados é sempre permitido para o conteúdo de uma domínio de rede. Um arquivo SWF local pode enviar dados a endereços de rede somente se estiver na área de proteção local confiável, local com rede ou em uma área de segurança AIR. Para obter mais informações, consulte Caixas de proteção locais .

É possível usar a função flash.net.sendToURL() para enviar dados a uma URL. Outros métodos também enviam solicitações a URLs. Esses incluem métodos de carregamento, como Loader.load() e Sound.load() , métodos de carregamento de dados, como URLLoader.load() e URLStream.load() .

Upload e download de arquivos

O método FileReference.upload() inicia o upload de um arquivo selecionado por um usuário a um servidor remoto. É necessário chamar o método FileReference.browse() ou FileReferenceList.browse() antes de chamar o método FileReference.upload() .

O código que inicia o método FileReference.browse() ou FileReferenceList.browse() somente pode ser chamado em resposta a um evento de mouse ou de teclado. Se ele for chamado em outras situações, o Flash Player 10 e versões posteriores irão gerar uma exceção. No entanto, um evento iniciado por usuário não é obrigatório para chamar estes métodos a partir da área de segurança do aplicativo do AIR.

A chamada do método FileReference.download() abre a caixa de diálogo na qual o usuário pode baixar um arquivo de um servidor remoto.

Nota: Se o servidor exigir autenticação de usuário, apenas os aplicativos Flash em execução em um navegador (ou seja, que utilizam plug-in para navegador ou controle ActiveX), poderão fornecer uma caixa de diálogo para solicitar que o usuário insira um nome e uma senha para autenticação, e somente para downloads. O Flash Player não permite uploads para um servidor que exige autenticação de usuário.

Uploads e downloads não serão permitidos se o arquivo SWF que está chamando estiver na caixa de proteção local com sistema de arquivos.

Por padrão, um arquivo SWF não pode iniciar um upload ou um download de um servidor que não seja seu próprio servidor. Um arquivo SWF pode carregar ou baixar de um servidor diferente se esse servidor fornecer um arquivo de política que conceda permissão ao domínio do arquivo SWF que está chamando.