Flash tip trik – externí data a zabezpečení

3.1.2007· Autor: Ondřej Brichta· Počet komentářů: 9

Pokud chceme získat data z jiných domén, než je SWF soubor do kterého data načítáme, narazíme na bezpečnostní opatření flashplayeru, které nám tento způsob načítání znemožní. Dnes si ukážeme řešení, které umožňuje načítání dat i z jiných domén.

Bezpečnostní opatření flashplayeru

Od verze 6 se v přehrávači flashových souborů začíná objevovat vylepšení, které omezuje načítání externích souborů z jiných domén. Ve svém důsledku tak nemůžeme jednoduše načíst SWF soubor, který je umístěn v jiné doméně, než je soubor, do kterého chceme externí SWFko načíst.

Pokud se snažíme načítat externí data z jiných domén, flashplayer automaticky hledá xml soubor s názvem „crossdomain.xml", který v sob může obsahovat povolené domény, které mohou data načítat.

crossdomain.xml

Dejme tomu, že máme soubor „animace1.swf", který je umístěn v doméně „www.domena.cz". Tento soubor se snaží načíst další SWF soubor s názvem „doplnek.swf", který je umístěn v doméně „www.doplnky.cz".

Pokud použijeme standardní příkaz loadMovie(„www.doplnky.cz/doplnek.swf"); , soubor „doplnek.swf" se nenačte, protože není na stejné úrovni jako soubor „animace1.swf". Abychom umožnili načtení souboru „doplnek.swf" z domény „www.doplnky.cz", musíme vytvořit XML soubor, který bude obsahovat seznam domén, které mohou načítat data z domény „www.doplnky.cz". Tento XML soubor se pak umístí na stejnou úroveň, jako jsou načítané externí soubory, tedy do „www.doplnky.cz".

XML soubor má název „crossdomain.xml„ a jeho struktura je následující:

<?xml version="1.0"?>
<cross-domain-policy>
 <allow-access-from domain="www.domena.cz" />
</cross-domain-policy>

Pomocí jednotlivých elementů „allow-access-from" určujeme domény, které mohou externí data načítat.

Jedno z důležitých pravidel při načítání dat s využitím „crossdomain.xml„ souboru mluví o tom, že tento XML soubor platí pro veškeré soubory umístěné ve stejné, nebo nižší úrovni. Pokud bude výše uvedený XML soubor umístěný například v „data" adresáři „www.doplnky.cz/data", můžeme bez problémů načítat soubory z adresy:

www.doplnky.cz/data/doplnek.swf
www.doplnky.cz/data /swf/doplnek.swf

V opačném případě soubory pod adresami:

www.doplnky.cz/doplnek.swf
www.doplnky.cz/swf/doplnek.swf

nebude možné načítat.

Při specifikaci jednotlivých domén můžeme využít zástupného symbolu „*", kterým můžeme redukovat seznam povolených domén:

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

Tento XML soubor povolí přístup z domény „www.domena.cz" stejně jako přístup z domény „www.soubory.domena.cz". Pokud chceme zpřístupnit obsah všem doménám, bez rozdílu názvu, použijeme tento jednoduchý zápis:

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

K datům pak bude umožněn přístup komukoliv.

Pokud potřebujeme použít více XML souborů, nebo je chceme mít pod jinými názvy, můžeme přímo ve flashovém dokumentu zavolat metodu „loadPolicyFile":

System.security.loadPolicyFile("http://www.doplnky.cz/xmlsoubor.xml");

a načíst „ručně" potřebný konfigurační soubor

 

Skriptování externích SWF souborů

pokud načítáme externí SWF soubory z jiných domén, nemáme možnost měnit proměnné a nebo pracovat s funkcemi, které jsou v těchto externích souborech umístěné. Ovšem i zde existuje řešení, kdy můžeme umožnit skriptování externích SWF souborů opět pouze vybraným doménám.

Postup je jednoduchý, zvolíme si soubor, u kterého chceme umožnit skriptování a který bude umístěn v jiné doméně, než je hlavní SWF soubor a vložíme do něj tento příkaz:

System.security.allowDomain("www.domena.cz");

Všechny SWF soubory, umístěné v doméně „www.domena.com" tak mohou po načtení přistupovat k proměnným a funkcím daného SWF souboru. Opět je možné využít zástupného znaku „*". Povolení skriptování jakémukoliv SWF souboru na internetu pak nastavíme takto:

System.security.allowDomain("*");

 

Další řešení - PHP skript

Existují ovšem případy, kdy nemůžeme vložit soubor „crossdomain.xml" k externím datům. S tímto se často setkáme při čtení RSS kanálů, kdy je XML soubor umístěn na cizím serveru. V tomto případě je možné využít skript na straně serveru, který u PHP může vypadat takto:

<?php
$rss = $_GET['rss'];
readfile($rss);
?>

Další techniky jsou popsány zde.

Ondřej Brichta Vývojář multimediálních aplikací, šéfredaktor Flash.cz, školitel produktů Flash, Flex, Flash Media Server

Web: http://www.obria.cz |

Motto: <°))))><

Seriál: Tipy a triky

Tipy a triky je seriál zaměřený na zajímavá řešení a vylepšení flashových aplikací

Komentáře k článku  
Co když je externí flash umístěn na CD ? Soki | 11.1.2007 13:53
Re: Co když je externí flash umístěn na CD ? OBr | 11.1.2007 14:00
uřesnění Soki | 11.1.2007 17:00
Re: uřesnění OBr | 11.1.2007 18:06
Re: Re: uřesnění Soki | 11.1.2007 18:24
Re: Re: Re: uřesnění OBr | 11.1.2007 18:45
Re: Re: Re: Re: uřesnění OBr | 11.1.2007 18:46
RSS z ciziho serveru do flash pres PHP pomoci curl SC | 22.11.2008 16:14
funkcni reseni Simon P40 | 29.8.2009 21:12

Přihlášení uživatele