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í