Caixas de proteção de segurança
Flash Player 9 e posterior, Adobe AIR 1.0 e posterior
Os computadores clientes podem obter arquivos individuais que contêm código, conteúdo e dados de várias fontes, como sites externos, um sistema local de arquivos ou de um aplicativo do AIR instalado. Os aplicativos Flash Player e AIR atribuem arquivos de código e outros recursos individualmente, como objetos compartilhados, bitmaps, sons, vídeos e arquivos de dados, a caixas de proteção de segurança com base em sua origem quando eles são carregadas. As seções a seguir descrevem as regras aplicadas pelos aplicativos que controlam o que um código ou conteúdo dentro de uma determinada caixa de proteção pode acessar.
Para obter mais informações sobre a segurança do Flash Player, consulte o tópico “Segurança” do Centro de desenvolvedores do Flash Player, em
www.adobe.com/go/devnet_security_br
.
Caixas de proteção remotas
Os aplicativos Flash Player e AIR classificam os recursos (inclusive arquivos SWF) da Internet em caixas de proteção separadas que correspondem ao seu domínio de origem. Por exemplo, os recursos carregados de
example.com
serão colocados em uma caixa de proteção diferente dos recursos carregados de
foo.org
. Por padrão, esses arquivos têm permissão para acessar quaisquer recursos de seu próprio servidor. Arquivos SWF remotos podem receber permissão para acessar dados adicionais de outros domínios por permissões explícitas de autor e de site, como arquivos de política de URL e o método
Security.allowDomain()
. Para obter detalhes, consulte
Controles de site (arquivos de política)
e
Controles de autor (desenvolvedor)
.
Arquivos SWF remotos não podem carregar nenhum recurso ou arquivo local.
Para obter mais informações sobre a segurança do Flash Player, consulte o tópico “Segurança” do Centro de desenvolvedores do Flash Player, em
www.adobe.com/go/devnet_security_br
.
Caixas de proteção locais
Arquivo local
descreve qualquer arquivo que é referenciado usando o protocolo
file:
ou um caminho UNC (Convenção de nomenclatura universal). Arquivos SWF locais são colocados em uma de quatro caixas de proteção locais:
-
A caixa de proteção local com sistema de arquivos — Por motivo de segurança, os aplicativos Flash Player e AIR colocam todos os arquivos locais na caixa de proteção local com sistema de arquivos (padrão). Nessa caixa de proteção, os códigos executáveis podem ler arquivos locais (usando a classe URLLoader, por exemplo), mas não podem se comunicar com a rede de nenhuma maneira. Isso garante ao usuário que os dados locais não podem ser vazados para a rede ou, de outra forma, compartilhados de maneira inadequada.
-
A caixa de proteção local com a rede — ao compilar um arquivo SWF, é possível especificar que ele tem acesso à rede quando executado como um arquivo local (consulte
Configuração de tipo de caixa de proteção de arquivos SWF locais
). Esses arquivos são colocados na caixa de proteção local com a rede. Arquivos SWF que são atribuídos à caixa de proteção local com a rede perdem o acesso a seus arquivos locais. Em troca, os arquivos SWF têm permissão para acessar dados da rede. No entanto um arquivo SWF local com a rede ainda não tem permissão para ler nenhum dado derivado da rede a menos que permissões estejam presentes para aquela ação, por meio de um arquivo de política de URL ou de uma chamada ao método
Security.allowDomain()
. Para conceder essa permissão, um arquivo de política de URL deve conceder permissão a
todos
os domínios usando
<allow-access-from domain="*"/>
ou usando
Security.allowDomain("*")
. Para obter mais informações, consulte
Controles de site (arquivos de política)
e
Controles de autor (desenvolvedor)
.
-
A caixa de proteção local confiável — arquivos SWF locais que estão registrados como confiáveis (pelos usuários ou pelos programas instaladores) são colocados na caixa de proteção local confiável. Administradores do sistema e usuários também têm a capacidade de reatribuir (mover) um arquivo SWF local para ou de uma caixa de proteção local confiável com base em considerações de segurança (consulte
Controles de administrador
e
Controles de usuário
). Arquivos SWF atribuídos à caixa de proteção local confiável podem interagir com quaisquer outros arquivos SWF e carregar dados de qualquer lugar (remoto ou local).
-
A caixa de proteção do aplicativo do AIR — esta caixa de proteção contém conteúdo instalado com o aplicativo do AIR em execução. Por padrão, o código executado na caixa de proteção do aplicativo do AIR podem realizar o cruzamento de scripts de códigos em qualquer domínio. No entanto, arquivos fora da caixa de proteção do aplicativo do AIR não têm permissão para executar o cruzamento de scripts de códigos na caixa de proteção do aplicativo. Por padrão, o código e o conteúdo na caixa de proteção do aplicativo do AIR podem carregar conteúdo e dados de qualquer domínio.
A comunicação entre as caixas de proteção local com rede e local com sistema de arquivos, bem como a comunicação entre as caixas de proteção remota e local com sistema de arquivos, é estritamente proibida. Permissão para essa comunicação não pode ser concedida por um aplicativo executado no Flash Player ou por um usuário ou administrador.
Script em qualquer direção entre arquivos HTML locais e arquivos SWF locais, por exemplo, usando a classe ExternalInterface, exige que tanto os arquivos HTML quanto os arquivos SWF envolvidos estejam na caixa de proteção local confiável. Isso ocorre porque os modelos de segurança locais de navegadores diferem do modelo de segurança local do Flash Player.
Arquivos SWF na caixa de proteção local com rede não podem carregar arquivos SWF na caixa de proteção local com sistema de arquivos. Arquivos SWF na caixa de proteção local com sistema de arquivos não podem carregar arquivos SWF na caixa de proteção local com rede.
A caixa de proteção do aplicativo do AIR
O aplicativo Adobe AIR acrescenta uma caixa de proteção a mais, chamada
application
, ao modelo de caixa de proteção de segurança do Flash Player. Os arquivos instalados como parte de um aplicativo do AIR são carregados na caixa de proteção do aplicativo. Qualquer outro arquivo carregado pelo aplicativo terá restrições de segurança correspondentes àquelas especificadas pelo modelo normal de segurança do Flash Player.
Quando um aplicativo for instalado, todos os arquivos incluídos em um pacote do AIR são instalados em um diretório do aplicativo no computador do usuário. Os desenvolvedores podem fazer referência a esse diretório no código por meio do esquema de URL
app:/
(consulte
Esquemas de URI
). Todos os arquivos na árvore de diretório do aplicativo são atribuídos à caixa de proteção do aplicativo quando o aplicativo é executado. O conteúdo na caixa de proteção do aplicativo é agraciado com os privilégios completos disponíveis para o aplicativo do AIR , incluindo interação com o sistema de arquivos local.
Muitos dos aplicativos AIR só usam esses arquivos instalados localmente para executar o aplicativo. No entanto, os aplicativos AIR não estão restritos apenas aos arquivos no diretório do aplicativo - eles podem carregar qualquer tipo de arquivo de qualquer fonte. Isso inclui arquivos locais do computador do usuário, bem como arquivos de fontes externas disponíveis, como aqueles em uma rede local ou na Internet. O tipo de arquivo não tem nenhum impacto nas restrições de segurança, os arquivos HTML carregados têm os mesmos privilégios de segurança dos arquivos SWF carregados da mesma fonte.
O conteúdo na caixa de proteção de segurança do aplicativo tem acesso as APIs do AIR que o conteúdo de outras caixas de proteção não pode usar. Por exemplo, a propriedade
air.NativeApplication.nativeApplication.applicationDescriptor
, que retorna o conteúdo do arquivo descritor do aplicativo para o aplicativo, está restrita ao conteúdo na caixa de proteção de segurança do aplicativo. Outro exemplo de API restrita é a classe FileStream, que contém métodos de leitura e gravação no sistema de arquivos local.
As APIs do ActionScript disponíveis apenas para o conteúdo na caixa de proteção de segurança do aplicativo são indicadas com o logotipo do AIR na
Referência do ActionScript 3.0 para a plataforma Adobe Flash
. Usar essas APIs em outras caixas de proteção faz com que o tempo de execução lance uma exceção SecurityError.
No conteúdo HTML (em um objeto HTMLLoader), todas as APIs JavaScript do AIR (aquelas que estão disponíveis através da propriedade
window.runtime
ou através do objeto
air
durante o uso do arquivo AIRAliases.js) estão disponíveis para o conteúdo na caixa de proteção de segurança do aplicativo. O conteúdo HTML de outra caixa de proteção não tem acesso à propriedade
window.runtime
, portanto, esse conteúdo não pode acessar as APIs do AIR ou do Flash Player.
Os conteúdos executados na caixa de proteção do aplicativo do AIR têm as seguintes restrições a mais:
-
Para conteúdo HTML na caixa de proteção de segurança do aplicativo, há limitações de uso de APIs que possam transformar dinamicamente as strings em código executável, após o código ser carregado. Isso é para evitar que o aplicativo injete inadvertidamente (e execute) código de fontes "não aplicativo" (como domínios de rede potencialmente inseguros). Um exemplo é o uso da função
eval()
. Para obter detalhes, consulte
Restrições de código de conteúdo em caixas de proteção distintas
.
-
Para evitar possíveis ataques de phishing, as tags
img
de conteúdo HTML nos objetos TextField do ActionScript são ignoradas no conteúdo SWF na caixa de proteção de segurança do aplicativo.
-
O conteúdo na caixa de proteção do aplicativo não pode usar o protocolo
asfunction
do conteúdo HTML nos campos de texto do ActionScript 2.0.
-
O conteúdo SWF na caixa de proteção do aplicativo não pode usar o cache entre domínios, um recurso que foi adicionado à Atualização 3 do Flash Player 9. Esse recurso permite que o Flash Player persista em colocar em cache o conteúdo de componente da plataforma Adobe e reutilize-o no conteúdo SWF carregado sob demanda (eliminando a necessidade de recarregar o conteúdo várias vezes).
Restrições a JavaScript dentro do AIR
Ao contrário do conteúdo na caixa de proteção de segurança do aplicativo, o conteúdo JavaScript em uma caixa de proteção de segurança que não seja de aplicativo
pode
chamar a função
eval()
para executar código gerado dinamicamente a qualquer momento. Entretanto, existem restrições a JavaScript executado em uma caixa de proteção de segurança que não seja de aplicativo dentro do AIR. Isso inclui:
-
O código JavaScript em uma caixa de proteção "não aplicativo" não tem acesso ao objeto
window.runtime
e, portanto, esse código não pode executar APIs do AIR.
-
Por padrão, o conteúdo em uma caixa de proteção de segurança "não aplicativo" não pode usar chamadas XMLHttpRequest para carregar dados de outros domínios diferentes do domínio que chama a solicitação. Entretanto, o código do aplicativo pode conceder permissão para que o conteúdo "não aplicativo" faça isso, definindo um atributo
allowCrossdomainXHR
no frame ou iframe que o contém. Para obter mais informações, consulte
Restrições de código de conteúdo em caixas de proteção distintas
.
-
Há restrições na chamada do método
window.open()
de JavaScript. Para obter detalhes, consulte
Restrições na chamada do método window.open() de JavaScript
.
-
O conteúdo HTML nas caixas de proteção de segurança remota (rede) pode carregar apenas conteúdo CSS,
frame
,
iframe
e
img
de domínios remotos (de URLs de rede).
-
O conteúdo HTML nas caixas de proteção local com sistema de arquivos, local com rede ou local confiável só podem carregar conteúdo CSS,
frame
,
iframe
e
img
de caixas de proteção locais (e não de URLs de aplicativo ou de rede).
Para obter detalhes, consulte
Restrições de código de conteúdo em caixas de proteção distintas
.
Configuração de tipo de caixa de proteção de arquivos SWF locais
Um usuário final ou o administrador de um computador pode especificar que um arquivo SWF local é confiável, permitindo que ele carregue dados de todos os domínios, tanto locais quanto de rede. Isso é especificado nos diretórios Global Flash Player Trust e User Flash Player Trust. Para obter mais informações, consulte
Controles de administrador
e
Controles de usuário
.
Para obter mais informações sobre caixas de proteção locais, consulte
Caixas de proteção locais
.
Adobe Flash Professional
É possível configurar um arquivo SWF para a caixa de proteção local com sistema de arquivos ou a caixa de proteção local com rede definindo-se as configurações de publicação do documento na Ferramenta de autoria.
Adobe Flex
É possível configurar um arquivo SWF para a caixa de proteção local com sistema de arquivos ou a caixa de proteção local com rede configurando o sinalizador
use-network
no compilador do Adobe Flex. Para obter mais informações, consulte “Sobre as opções do compilador do aplicativo” em
Criação e implantação de aplicativos do Adobe Flex 3
.
A propriedade Security.sandboxType
Um autor de um arquivo SWF pode usar a propriedade estática somente leitura
Security.sandboxType
para determinar o tipo de caixa de proteção à qual o aplicativo Flash Player ou AIR atribuiu o arquivo SWF. A classe Security inclui constantes que representam valores possíveis da propriedade
Security.sandboxType
, da seguinte maneira:
-
Security.REMOTE
— o arquivo SWF é proveniente de uma URL da Internet e opera de acordo com as regras da caixa de proteção com base em domínio.
-
Security.LOCAL_WITH_FILE
— o arquivo SWF é um arquivo local, mas não foi considerado como confiável pelo usuário e não foi publicado com uma designação de rede. O arquivo SWF pode ler de fontes de dados locais, mas não pode se comunicar com a Internet.
-
Security.LOCAL_WITH_NETWORK
— o arquivo SWF é um arquivo local e não foi considerado como confiável pelo usuário, mas foi publicado com uma designação de rede. O arquivo SWF pode se comunicar com a Internet mas não pode ler de fontes de dados locais.
-
Security.LOCAL_TRUSTED
— o arquivo SWF é um arquivo local e foi considerado como confiável pelo usuário, seja usando o Gerenciador de configurações ou um arquivo de configuração de confiança do Flash Player. O arquivo SWF pode ler de fontes de dados locais e se comunicar com a Internet.
-
Security.APPLICATION
— o arquivo SWF está em execução em um aplicativo do AIR e foi instalado com o pacote (arquivo AIR) daquele aplicativo. Por padrão, os arquivos na caixa de proteção do aplicativo do AIR podem executar cross-script de qualquer arquivo em qualquer domínio. No entanto, arquivos fora da caixa de proteção do aplicativo do AIR não têm permissão para executar cross-script no arquivo AIR. Por padrão, os arquivos na caixa de proteção do aplicativo do AIR podem carregar conteúdo e dados de qualquer domínio.
|
|
|
|
|