Visão geral da segurança da Plataforma Flash

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

Uma boa parte do modelo de segurança utilizado pelos aplicativos Flash Player e AIR tem por base o domínio de origem dos arquivos SWF, HTML, mídias e outros recursos carregados. Código executável em um arquivo de um domínio específico da Internet, como www.example.com, sempre pode acessar todos os dados daquele domínio. Esses ativos são colocados no mesmo agrupamento de segurança, conhecido como uma caixa de proteção de segurança . (Para obter mais informações, consulte Caixas de proteção de segurança .)

Por exemplo, um código do ActionScript em um arquivo SWF pode carregar arquivos SWF, bitmaps, áudio, arquivos de texto e qualquer outro ativo do seu próprio domínio. Além disso, o cruzamento de scripts entre dois arquivos do mesmo domínio sempre é permitido, desde que os dois arquivos sejam escritos usando o ActionScript 3.0. O Cross-scripting é a capacidade do código de um arquivo de usar o ActionScript para acessar propriedades, métodos e objetos definidos pelo código em outro arquivo SWF.

O cross-scripting não é suportado entre arquivos SWF escritos usando o ActionScript 3.0 e versões anteriores do ActionScript. No entanto esses arquivos podem se comunicar usando a classe LocalConnection. Além disso, a capacidade de um arquivo SWF de executar cross-script de arquivos SWF do ActionScript 3.0 de outros domínios e de carregar dados de outros domínios é proibida por padrão. No entanto esse acesso pode ser concedido com uma chamada para o método Security.allowDomain() no arquivo SWF carregado. Para obter mais informações, consulte Cross-scripting .

Por padrão, as seguintes regras básicas de segurança sempre se aplicam:

  • Recursos na mesma caixa de proteção de segurança sempre podem acessar um ao outro.

  • Código executável em arquivos em uma caixa de proteção remota nunca acessam arquivos e dados locais.

Os aplicativos Flash Player e AIR consideram o seguinte como domínios individuais, e criam caixas de proteção individuais para cada um:

  • http://example.com

  • http://www.example.com

  • http://store.example.com

  • https://www.example.com

  • http://192.0.34.166

Mesmo que um domínio nomeado, como http://example.com, mapeie para um endereço IP específico, como http://192.0.34.166, o aplicativo criará caixas de proteção de segurança separadas para cada um.

Existem dois métodos básicos que podem ser usados por um desenvolvedor para conceder acesso a um arquivo SWF a ativos das caixas de proteção diferente daquela do arquivo SWF:

Nos modelos de segurança do Flash Player e do aplicativo do AIR, há uma distinção entre carregamento de conteúdo e extração ou acesso a dados. Content é definido como mídia, incluindo mídia visual que o aplicativo pode exibir, áudio, vídeo ou um arquivo SWF ou HTML que inclui mídia exibida. Data é definido como algo que é acessível apenas ao código Content e data são carregados de maneiras diferentes.

  • Carregamento de conteúdo — Você pode carregar conteúdos utilizando classes, tais como Loader, Sound e NetStream; através de marcas MXML ao usar o Flex; ou através de marcas HTML em um aplicativo do AIR.

  • Extração de dados—você pode extrair dados do conteúdo de mídia carregado usando objetos Bitmap, os métodos BitmapData.draw() e BitmapData.drawWithQuality() , a propriedade Sound.id3 ou o método SoundMixer.computeSpectrum() . O método drawWithQuality está disponível no Flash Player 11.3 e superior; AIR 3.3 e superior.

  • Acesso a dados — é possível acessar dados diretamente carregando-os de um arquivo externo (como um arquivo XML) usando classes, como as classes URLStream, URLLoader, FileReference, Socket e XMLSocket. O AIR oferece mais classes para carregamento de dados, tais como FileStream e XMLHttpRequest.

O modelo de segurança do Flash Player define diferentes regras para carregamento de conteúdo e acesso a dados. Em geral, há menos restrições no carregamento de conteúdo do que no acesso a dados.

Em geral, o conteúdo (arquivos SWF, bitmaps, arquivos mp3 e vídeos) pode ser carregado a partir de qualquer local, mas se o conteúdo for de um domínio diferente daquele do arquivo código ou conteúdo carregado, ele será particionado em uma caixa de proteção de segurança separada.

Há algumas barreiras no que diz respeito ao carregamento de conteúdo:

  • Por padrão, arquivos SWF locais (carregados de um endereço que não seja da rede, como do disco rígido de um usuário) são classificados na caixa de proteção local com sistema de arquivos. Esses arquivos não podem carregar conteúdo da rede. Para obter mais informações, consulte Caixas de proteção locais .

  • Servidores de protocolo RTMP podem limitar o acesso ao conteúdo. Para obter mais informações, consulte Conteúdo entregue usando servidores RMTP .

Se a mídia carregada for uma imagem, áudio ou vídeo, seus dados, como dados de pixel e dados de som, poderão ser acessados por um arquivo SWF fora de sua caixa de proteção de segurança apenas se o domínio daquele arquivo SWF tiver sido incluído em um arquivo de política de URL no domínio de origem da mídia. Para obter detalhes, consulte Acesso à mídia carregada como dados .

Outras formas de dados carregados incluem arquivos de texto ou XML que são carregados com um objeto URLLoader. Novamente nesse caso, para acessar quaisquer dados de outra caixa de proteção de segurança, permissão deve ser concedida por meio de um arquivo de política de URL no domínio de origem. Para obter detalhes, consulte Uso de URLLoader e URLStream .

Nota: Os arquivos de Política nunca são obrigatórios para os códigos executados na caixa de proteção do aplicativo do AIR para carregar conteúdos ou dados remotos.