Bezpieczna praca z treścią niezaufaną

Adobe AIR 1.0 i starsze wersje

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.