Trabalho seguro com conteúdo não confiável

Adobe AIR 1.0 e posterior

O conteúdo não atribuído à caixa de proteção do aplicativo pode oferecer funcionalidade adicional de script ao aplicativo, mas somente se ele atender aos critérios de segurança do tempo de execução. Este tópico explica o contrato de segurança do AIR com conteúdo "não aplicativo".

Security.allowDomain()

Os aplicativos AIR restringem o acesso de script de conteúdo "não aplicativo" com mais rigor do que o plug-in de navegador do Flash Player restringe o acesso de script de conteúdo não confiável. Por exemplo, no Flash Player, no navegador, quando um arquivo SWF atribuído à caixa de proteção local-trusted chama o método System.allowDomain() , todos os SWF carregados do domínio especificado receberão acesso de script. Não é permitida a abordagem análoga do conteúdo do aplicativo nos aplicativos AIR, já que ela concederia acesso excesso não razoável ao arquivo "não aplicativo" no sistema de arquivos do usuário. Os arquivos remotos não podem acessar diretamente a caixa de proteção do aplicativo, independentemente das chamadas para o método Security.allowDomain() .

Script entre conteúdo de aplicativo e "não aplicativo"

Os aplicativos AIR que fazem script entre conteúdo aplicativo e "não aplicativo" têm organizações de segurança mais complexas. Os arquivos que não estão na caixa de proteção do aplicativo só têm permissão para acessar propriedades e métodos de aplicativos na caixa de proteção do aplicativo por meio do uso de uma ponte de caixa de proteção. A ponte da caixa de proteção atua como gateway entre o conteúdo do aplicativo e "não aplicativo", oferecendo interação explícita entre os dois arquivos. Quando usadas corretamente, as pontes de caixa de proteção oferecem uma camada extra de segurança, impedindo o conteúdo "não aplicativo" de acessar as referências de objeto que fazem parte do conteúdo do aplicativo.

O benefício das pontes de caixa de proteção é ilustrado melhor através do exemplo. Suponhamos que um aplicativo de armazenamento de música do AIR deseja fornecer uma API para anunciantes que desejam criar seus próprios arquivos SWF, com o qual o aplicativo de armazenamento poderá se comunicar em seguida. A loja deseja fornecer aos anunciantes métodos de pesquisa de artistas e CDs, mas também deseja isolar alguns métodos e propriedades do arquivo SWF terceirizado, por motivos de segurança.

A ponte de caixa de proteção pode propiciar essa funcionalidade. Por padrão, o conteúdo carregado externamente em um aplicativo do AIR em tempo de execução não tem acesso a nenhum método ou propriedade no aplicativo principal. Com a implementação da ponte de caixa de proteção personalizada, o desenvolvedor pode fornecer serviços ao conteúdo remoto sem expor esses métodos ou propriedades. Considere a ponte de caixa de proteção como um caminho entre o conteúdo confiável e o não confiável, oferecendo comunicação entre o conteúdo carregado e o do carregador sem expor as referências do objeto.

Para obter mais informações sobre como usar pontes de caixa de proteção de forma segura, consulte Script entre conteúdos em domínios distintos .

Proteção contra conteúdo SWF inseguro gerado dinamicamente.

O método Loader.loadBytes() oferece uma maneira de o aplicativo gerar conteúdo SWF de uma matriz de bytes. No entanto, ataques de injeção em dados carregados de fontes remotas podem causar dano grave ao carregar o conteúdo. Isso é particularmente verdadeiro ao carregar dados na caixa de proteção do aplicativo, onde o conteúdo SWF gerado pode acessar o conjunto completo de APIs do AIR.

Há usos válidos para a utilização do método loadBytes() sem gerar um código SWF executável. Você pode usar o método loadBytes() para gerar dados de imagem para controlar o tempo de exibição de imagem, por exemplo. Há também usos válidos que dependem do código de execução, como a criação dinâmica de conteúdo SWF para reprodução de áudio. No AIR, por padrão, o método loadBytes() não permite carregar conteúdo SWF, ele só permite carregar conteúdo de imagem. No AIR, a propriedade loaderContext do método loadBytes() tem uma propriedade allowLoadBytesCodeExecution , que você pode definir como true para permitir explicitamente que o aplicativo use loadBytes() para carregar o conteúdo SWF executável. O código a seguir mostra como usar esse recurso:

var loader:Loader = new Loader(); 
var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.allowLoadBytesCodeExecution = true; 
loader.loadBytes(bytes, loaderContext);

Se você chamar loadBytes() para carregar conteúdo SWF e a propriedade allowLoadBytesCodeExecution do objeto LoaderContext estiver definida como false (o padrão), o objeto Loader lançará uma exceção SecurityError.

Nota: Em um lançamento futuro do Adobe AIR, essa API pode ser alterada. Quando isso ocorre, talvez seja necessário recompilar o conteúdo que usa a propriedade allowLoadBytesCodeExecution da classe LoaderContext.