Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

Com o crescente aumento de aplicações AIR e Flex, integração entre servidores e a utilização crescente de WEBservice, se torna importante conhecer um pouco do crossdomain. O Crossdomain é um arquivo XML com as permissões de acesso ao servidor, podendo impedir ou liberar que aplicações Flash se comuniquem com o servidor.

Para que sua aplicação consiga acessar dados de outro domínio, é necessário um arquivo chamado crossdomain.xml, que deve residir na raiz do servidor (ou outro diretório, com ajuda de Actionscript para mostrar o caminho) e é automaticamente procurado pelo Flash Player assim que uma requisição for feita àquele servidor.

Vamos ao básico!

O arquivo crossdomain.xml deve conter uma única tag (tag pai) chamada <cross-domain-policy> e dentro dela uma ou mais tags <allow-access-from> (tag filho), informando os domínios permitidos.

Para especificar os domínios permitidos nas tags <allow-access-from>, é possível utilizar:

- uma simples URL;
- um endereço IP;
- ou um * seguido de partes do domínio para abranger um range maior de possibilidades;

Ficou complicado? Veja o exemplo:

<cross-domain-policy>
    <!?aceitar acesso do domínio www.mxml.com.br-->
      <allow-access-from domain="www.mxml.com.br" />
    <!?aceitar acesso do domínio mxml.com.br e qualquer subdomínio -->
      <allow-access-from domain="*.mxml.com.br " />
    <!?aceitar acesso somente do IP informado -->
      <allow-access-from domain="127.0.0.1" />
    <!?liberado para qualquer domínio (Cuidado) -->
      <allow-access-from domain="*" />
</cross-domain-policy>

Para cada domino que você deseja liberar o acesso, deve-se inserir uma tag <allow-access-from> e especificar o domínio.

Caso você deseje liberar o acesso para qualquer domínio, basta inserir apenas uma tag <allow-access-from> com o atributo domain=?*?.

Veja meu caso. Possuo um crossdomain em /crossdomain.xml, e o mesmo possui a seguinte estrutura:

<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

No meu caso liberei para qualquer servidor acessar, por ser um server de compartilhamento de informação, e com isso qualquer dado existente neste servidor, poderá ser utilizado por qualquer pessoa que queira testar seus aplicativos, ou mesmo os testes que passo aqui.

E para acessar dados em um servidor HTTPS de um servidor HTTP, basta adicionar um novo atributo na tag <allow-access-from> chamado secure=?false? e definir seu valor como false. O valor default dele é true. Exemplo:

<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*" secure="false" />
</cross-domain-policy>

Baseado de Cross-Domain Policy

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

10 comentários

Deixe uma resposta

  1. Muito bom... adorei a leitura.

    E como essas regras de segurança se comportam com apps em Air?

    Pergunto porque tenho uma app Air 1.5/Flex 3 que busca informações num servidor remoto via HTTPServices e roda de boa... na versão final da app roda sem problemas... quando tá rodando em projeto o flex builder dá uma série de avisos de violação de sandbox, mas mesmo assim a informação é retornada do servidor.

    E independentemente de ter ou não o crossdomainl.xml no servidor ocorre tudo como eu descrevi.

     
  2. Ola @Wemerson

    AIR não tem as validações do crossdomain. Então fique tranqüilo pois esta segurança não irá lhe atrapalhar.

     
  3. Muito bom... adorei a leitura.

    E como essas regras de segurança se comportam com apps em Air?

    Pergunto porque tenho uma app Air 1.5/Flex 3 que busca informações num servidor remoto via HTTPServices e roda de boa... na versão final da app roda sem problemas... quando tá rodando em projeto o flex builder dá uma série de avisos de violação de sandbox, mas mesmo assim a informação é retornada do servidor.

    E independentemente de ter ou não o crossdomainl.xml no servidor ocorre tudo como eu descrevi.

     
  4. Olá,

            Em Flash, um simples leitor de rss do twitter funciona normalmente "local". O Twitter tem o crossdomain.xml que permite o acesso mas mesmo assim ao publicar o leitor... nada!

            Flash/AS2

    Security.allowDomain('http://www.twitter.com'); //loadPolicyFile

    System.security.loadPolicyFile("http://www.twitter.com/crossdomain.xml");

    var twitter_xml:XML = new XML();
    twitter_xml.ignoreWhite = true;
    var twitter_url:String = "http://twitter.com/statuses/user_timeline/fabio_nani.xml?count=5";

    twitter_xml.load(twitter_url);

    twitter_xml.onLoad = function(success){
        if (success){
            var link:String = this.childNodes[0].childNodes[0].childNodes[9].childNodes[2].childNodes[0];
            meu.onPress = function(){
                getURL("http://www.twitter.com/" + link + "", "_blank");
            };
            teste = (this.firstChild)
            //Puxo aqui todos os nos que necessito
        }
    };

    Onde estou errando???

     
  5. o http://www.twitter.com/crossdomain.xml não permite acesso de host externos.

            
            
            
            
            
            

     
  6. @Paulo_Stoppa O crossdomain sempre deve estar no servidor que estas acessando. No caso no http://meuServidorServices:8080/crossdomain.xml

     
  7. cara, estou com a seguinte duvida... minha aplicação flex fica em http://meuServidorFlex:8080/appFlex

    e tento acessar http://meuServidorServices:8080/services

    o crossdomain deve ficar em qual servidor?

     
  8. [...] Este erro acontece sempre que tentamos acessar DNS diferente do que o SWF esta rodando e o mesmo não possuir crossdomain.xml. [...]

     
  9. Boa tarde, eu estou com o seguinte problema, estou usando a api do googlesMaps e quando vou alterar o zoom algumas veses da o seguinte erro:
    SecurityError: Error #2121: Security sandbox violation: removeChildAt: http://maps.googleapis.com/mapfiles/lib/map_1_8c.swf cannot access app://Teste.swf. This may be worked around by calling Security.allowDomain.
    Este erro tem haver com o Cross-Domain Policy ? Se tiver como resolver ?
    Valeu