Snabbtips En guide till korsdomänpolicyfiler

Varje Flash eller Flex-utvecklare som har fått tillgång till fjärråtkomst har kommit över en policyfil för crossdomain.xml vid någon tidpunkt. Den här artikeln tar en titt på vad dessa policyfiler är, hur de fungerar och hur du kan skapa en för dig själv.

Exempel

Låt oss ta en titt på ett exempel på vad vi pratar om:

Vad är så speciellt med detta? Jo, SWF laddar smileybilden från http://mytestgae.appspot.com/images/smiley.jpg, inte från Activetuts + -domänen. Utan en korsdomenpolicyfil försöker man ladda upp bilden en SecurityError.


Vad är en korsdomenpolicyfil?

Den säkerhetsmodell som kallas "samma ursprung" -policy, som implementeras av de flesta moderna webbläsare, förhindrar att vissa typer av innehåll kan nås eller ändras om filen finns på en annan domän. Det är inte en hård och snabb regel; HTML-sidor visar gärna bilder och HTML från sidor på andra domäner. Men för JavaScript hindrar samma ursprungspolicy ett dokument eller ett skript som laddas från ett ursprung från att få eller ställa in egenskaper för ett dokument från en annan.

Flash innehåller en liknande säkerhetspolicy som i allmänhet förhindrar att en Flash-applikation åtkomst till data som finns på en fjärrdomän. Men det finns många omständigheter där det inte bara är användbart men förväntat att resurser kommer att nås på distans. Ett onlinefotoalbum skulle vara begränsat om externa applikationer inte kunde ladda ner bilderna. Det skulle också vara dumt om en webbtjänst inte tillåter externa applikationer att interagera med det.

Av den anledningen är det möjligt att skapa en XML-fil, kallad crossdomain.xml, som anger hur data på en domän kan nås av en Flash-applikation som är värd på en fjärrdomän. För det mesta är dessa policyfiler ganska enkla, men det finns några detaljer som det är användbart att vara medveten om.

Om du är värd för innehåll som du vill komma åt av externa Flash-applikationer måste du skapa en crossdomain.xml-fil. Låt oss börja med att titta på ett grundläggande exempel.


Steg 1: En grundläggande crossdomain.xml-fil

Här är en mycket enkel crossdomain.xml-fil. När den här filen är värd på roten till din domän tillåter det att externa Flash-program åtkomst till alla resurser på din domän.

    

Politikfilen innehåller en enda märka. Inuti detta kan du ha noll eller mer taggar. Varje tagg kan användas för att definiera en domän eller IP-adress från vilken en Flash-applikation kan komma åt de lokala resurserna. Attributet domän = "*" specificerar att alla domäner har åtkomst. Detta är tack vare asterisk wildcard, som används här för att matcha alla domäner och IP-adresser.

För de flesta situationer är denna "tillåta alla" policyfil tillräcklig. Det ger Flash-applikationer tillgång till alla skönhetsresurser, medan säkerhet som du har på plats (som lösenordsskyddade sidor) fortfarande hindrar Flash-program från att komma åt känslig data.

(Observera att du inte kan lägga en crossdomain.xml-fil på din domän som tillåter SWF-filer också på din domän för att komma åt fjärrfiler på annan domän!)


Steg 2: Specificerade domäner

Om du inte vill tillåta global tillgång till dina offentliga resurser, domän attributet i tagg kan användas för att ge tillgång till specifika domäner.

Du kan ange en domän i dess helhet. Exemplet nedan ger tillgång till Flash-applikationer som finns i domänen www.example.com.

Du kan använda stjärnkortet för att matcha de domäner som slutar med det angivna suffixet. Här ger vi tillgång till Flash-program på domänerna example.com, www.example.com, whatever.example.com etc.


Steg 3: Specificerade IP-adresser

Du kan ange åtkomst via IP-adress, precis som du kan ge tillgång till Flash-program som finns på specifika domäner. Samma tagg och attribut används, utom i det här fallet använder du en IP-adress:


Steg 4: Arbeta med HTTPS

Som standard kan en Flash-applikation som är värd på en HTTPS-server bara få tillgång till resurser på fjärr HTTPS-servrar. Men med tanke på det överhuvudtaget som HTTPS kan lägga till på en server kanske du inte vill använda den. I det här fallet ställer du in säkra tillskriva falsk kommer att tillåta en Flash-applikation på en HTTPS-server för åtkomst till data från en HTTP-server.


Steg 5: Remote Flash-program

Så vad händer om du inte vill att fjärranslutna Flash-program ska få tillgång till dina data? Du kan antingen skapa en crossdomain.xml-fil som inte innehåller någon tags:

  

Eller du kan helt enkelt inte ha en crossdomain.xml-fil alls.


Steg 6: Granulär kontroll av underkataloger

En korsdomenpolicyfil kontrollerar åtkomst till katalogen den är bosatt i och alla underkataloger under den. Så här placerar du en "tillåta alla" policyfil på din domänrot ger tillgång till hela din domän. Men det kan finnas situationer där du bara vill tillåta åtkomst till en viss underkatalog.

Med de senaste versionerna av Flash Player krävs det två XML-filer. Först måste du placera en crossdomain.xml-fil i roten på din domän som tillåter Flash att bearbeta ytterligare korsdomänpolicyfiler i underkatalogerna. Detta görs med märka. I exemplet nedan ställer vi in tillåten-domänöverskridande-politik tillskriva Allt, vilket innebär att de korsdomänpolicyfiler som kan finnas i underkatalogerna behandlas. Detta beteende är en förändring i Flash Player 9 Update 3 och uppåt. Tidigare hanterades policyfiler i underkataloger som standard utan att behöva ställa in tillåten-domänöverskridande-politik attribut.

Observera att vi inte har lagt till några taggar, vilket innebär att inga ytterligare crossdomain.xml-filer finns i underkatalogerna, kommer fjärranslutna Flash-program inte att ha tillgång till resurserna på den här servern.

Du kan läsa mer om metapolitiska alternativ i den här artikeln.

   

Därefter placerar du en crossdomain.xml-fil i den underkatalog du vill styra.

För att se ett exempel på detta i åtgärd kolla in den här filen. Denna policyfil, i roten till http://mytestgae.appspot.com/ domänen, använder tagg för att delegera kontroll till eventuella crossdomain.xml-filer som kan finnas i underkatalogerna. Då ger den här policyfilen i / images / subdirectory fullständig åtkomst till katalogen och någon underkatalog under den. Så en fjärransluten Flash-applikation kan komma åt smiley face-bilden i bildkatalogen så här:

      

Åtkomst till smiley face-bilden i / bilder-begränsad / katalog är dock inte tillåten eftersom det inte finns någon crossdomain.xml-fil i den bildbegränsade katalogen för att åsidosätta (saknas) åtkomst som ges av filen crossdomain.xml i roten av domänen. Om du kör koden nedan kommer det att resultera i ett undantag som kastas:

      

Undantaget lyder:
SecurityError: Fel # 2123: Överträdelse av säkerhets sandlåda: LoaderInfo.content: file: /// D | /CrossDomain.swf kan inte komma åt http://mytestgae.appspot.com/images-restricted/smiley.jpg. Inga policyfiler beviljades åtkomst.
på flash.display :: LoaderInfo / få innehåll ()
vid MethodInfo-635 ()


Steg 7: Cross Domain Policy vs Firewall

Så från ovanstående information ser det ut som korsdomänpolicyfiler kan användas för att effektivt begränsa åtkomst till Flash-program som inte är värd för din egen domän. Medan det är sant, borde du inte lita på en korsdomänpolicyfil för att begränsa tillgången till känslig information. Medan Flash kan respektera en crossdomain.xml-policyfil, kommer andra plattformar som PHP inte att göra det. Gör en sökning efter PHP Flash Proxy för att se vad jag menar. Genom att använda en proxy är det möjligt att få tillgång till all offentligt tillgänglig data oavsett förekomsten av korsdomänpolicyfiler. Och du behöver inte ens betala för en PHP-server - som jag kommer att visa i en framtida artikel kan Google App Engine användas som en proxy utan några förskottskostnader.

Utgångspunkten är att krypteringspolicyfiler ger ett sätt att selektivt bevilja åtkomst till lokala resurser via fjärranslutna Flash-applikationer, men endast om alla spelar med reglerna. Om du vill se till att dina privata uppgifter är privata, finns det ingen ersättning för en brandvägg.


Slutsats

Att hantera korsdomänpolicyfiler behöver inte vara komplicerat. När du förstår grunderna om hur de fungerar är det ganska enkelt att bevilja eller begränsa åtkomst till dina data med hjälp av fjärranslutna Flash-applikationer. Var bara medveten om att de inte är så säkra som de kanske inledningsvis verkar.

Jag hoppas att du gillade den här snabba tipsen, tack för att du läste!