Treść nie przypisana do obszaru izolowanego aplikacji może udostępniać dodatkowe funkcje skryptów w aplikacji, ale tylko wówczas, gdy spełnia kryteria zabezpieczeń określone przez środowisko wykonawcze. W niniejszym temacie opisano mechanizm zabezpieczeń AIR w przypadku treści nieaplikacyjnej.
Security.allowDomain()
Aplikacje AIR ograniczają dostęp skryptów w przypadku treści nieaplikacyjnej w sposób bardziej restrykcyjny niż przeglądarka Flash Player, która ogranicza dostęp do skryptów dla treści niezaufanej. Na przykład, jeśli w przeglądarce programu Flash Player plik SWF przypisany do
local-trusted
(lokalnie zaufanego) obszaru izolowanego wywoła metodę
System.allowDomain()
, dostęp do skryptów zostanie nadany każdemu plikowi SWF, który zostanie załadowany z określonej domeny. Analogiczne podejście nie jest dozwolone w przypadku treści
application
w aplikacjach AIR, ponieważ spowodowałoby to nieuzasadniony dostęp do pliku nieaplikacyjnego w systemie plików użytkownika. Pliki zdalne nie mogą bezpośrednio uzyskiwać dostępu do obszaru izolowanego aplikacji bez względu na wywołania metody
Security.allowDomain()
.
Treść aplikacyjna i nieaplikacyjna odwołująca się do skryptów
Dla aplikacji AIR, które odwołują się do skryptów między treścią aplikacyjną i nieaplikacyjną, obowiązują bardziej złożone zabezpieczenia. Pliki, które nie znajdują się w obszarach izolowanych aplikacji, mają dostęp do właściwości i metod plików w obszarze izolowanym aplikacji tylko za pośrednictwem mostu obszaru izolowanego. Most obszaru izolowanego działa jako brama między treścią aplikacyjną i nieaplikacyjną, umożliwiając jawne oddziaływania między dwoma plikami. Jeśli mosty są używane poprawnie, stanowią dodatkową warstwę zabezpieczeń, ograniczając dostęp treści nieaplikacyjnej do odwołań do obiektów, które stanowią część treści aplikacyjnej.
Korzyści wynikające ze stosowania mostów obszarów izolowanych są najlepiej ilustrowane za pomocą przykładów. Załóżmy, że aplikacja sklepu muzycznego AIR chce udostępnić interfejs API dla reklamodawców, którzy będą tworzyć własne pliki SWF, z którymi następnie będzie się komunikować aplikacja sklepu. Sklep chce udostępnić reklamodawcom metody wyszukiwania artystów i płyt CD ze sklepu, ale ze względów bezpieczeństwa chce również odizolować niektóre metody i właściwości od plików SWF innych firm (reklamodawców).
Jest to możliwe dzięki mostowi obszaru izolowanego. Domyślnie treść ładowana z zewnątrz do aplikacji AIR w czasie wykonywania nie ma dostępu do żadnych metod ani właściwości w aplikacji głównej. Za pomocą implementacji niestandardowego mostu obszaru izolowanego programista może udostępniać usługi dla zdalnej treści bez konieczności prezentowania tych metod i właściwości. Most obszaru izolowanego należy traktować jako ścieżkę między treścią zaufaną i niezaufaną — most zapewnia komunikację między treścią ładującą a ładowaną, bez konieczności ujawniania odwołań do obiektów.
Więcej informacji na temat bezpiecznego korzystania z mostów zawiera sekcja
Treść odwołująca się do skryptów w różnych domenach
.
Ochrona przed dynamicznym generowaniem niebezpiecznej treści SWF
Metoda
Loader.loadBytes()
udostępnia aplikacji sposób generowania treści SWF z tablicy bajtowej. Jednak ataki polegające na wstrzykiwaniu kodu do danych ładowanych ze źródeł zdalnych mogą powodować poważne uszkodzenia podczas ładowania treści. Jest to szczególnie istotne w przypadku ładowania danych do obszaru izolowanego aplikacji, gdy wygenerowana treść SWF ma dostęp do pełnego zestawu interfejsów API AIR.
Istnieją przyczyny stosowania metody
loadBytes()
bez konieczności generowania wykonywalnego kodu SWF. Metoda
loadBytes()
może służyć na przykład do generowania danych obrazu w celu kontrolowania czasu wyświetlania obrazu. Istnieją również uzasadnione zastosowania
oparte
na wykonaniu kodu, np. w przypadku dynamicznego tworzenia treści SWF przeznaczonej do odtwarzania audio. W środowisku AIR domyślnie metoda
loadBytes()
nie
umożliwia ładowania treści SWF; umożliwia wyłącznie ładowanie treści obrazu. W środowisku AIR właściwość
loaderContext
metody
loadBytes()
zawiera właściwość
allowLoadBytesCodeExecution
, dla której można ustawić wartość
true
, aby jawnie zezwolić aplikacji na korzystanie z metody
loadBytes()
w celu ładowania wykonywalnej treści SWF. Poniższy kod prezentuje użycie tej funkcji:
var loader:Loader = new Loader();
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.allowLoadBytesCodeExecution = true;
loader.loadBytes(bytes, loaderContext);
Jeśli metoda
loadBytes()
została wywołana w celu załadowania treści SWF, a dla właściwości
allowLoadBytesCodeExecution
obiektu LoaderContext ustawiono wartość
false
(domyślnie), wówczas obiekt Loader zwraca wyjątek SecurityError.
Uwaga:
W przyszłych wydaniach środowiska Adobe AIR ten interfejs API może ulec zmianie. W takim przypadku konieczne może być ponowne skompilowanie treści, która korzysta z właściwości
allowLoadBytesCodeExecution
klasy LoaderContext.
|
|
|