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





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
[...] Este erro acontece sempre que tentamos acessar DNS diferente do que o SWF esta rodando e o mesmo não possuir crossdomain.xml. [...]
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?
@Alcelyo veja http://maps.googleapis.com/crossdomain.xml
@Paulo_Stoppa O crossdomain sempre deve estar no servidor que estas acessando. No caso no http://meuServidorServices:8080/crossdomain.xml
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???
o http://www.twitter.com/crossdomain.xml não permite acesso de host externos.
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.
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.
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.