Odwołania do skryptów między domenami

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Jeśli dwa pliki napisane w języku ActionScript 3.0 lub dwa pliki HTML działające w środowisku AIR są udostępniane z tej samej domeny — na przykład adresem URL jednego pliku SWF jest http://www.example.com/swfA.swf, a adresem URL drugiego pliku jest http://www.example.com/swfB.swf — to kod zdefiniowany w tych plikach może nawzajem (między plikami) odczytywać i modyfikować swoje zmienne, obiekty, właściwości metody itd. Mechanizm ten jest określany jako odwołaniami do skryptów między domenami .

Jeśli dwa pliki są udostępniane przez serwery z różnych domen — na przykład http://siteA.com/swfA.swf i http://siteB.com/siteB.swf — wówczas domyślnie środowisko Flash Player lub AIR nie zezwala plikowi swfA.swf na wywoływanie kodu z pliku swfB.swf, ani nie zezwala plikowi swfB.swf na wywoływanie kodu z pliku swfA.swf. Plik SWF udziela uprawnień plikom SWF z innych domen, wywołując metodą Security.allowDomain() . Wywołując Security.allowDomain("siteA.com") , plik swfB.swf nadaje plikom SWF z witryny siteA.com uprawnienia do odwoływania się do siebie.

Nie są możliwe odwołania między plikami SWF AVM1 przez SWF AVM2. Plik SWF AVM1 to plik utworzony w języku ActionScript 1.0 lub ActionScript 2.0. (Skróty AVM1 i AVM2 oznaczają wersje maszyny wirtualnej ActionScript Virtual Machine). Można jednak przesyłać dane między maszynami AVM1 i AVM2 za pośrednictwem klasy LocalConnection.

Przy wszelkich odwołaniach między skryptami konieczne jest jednoznaczne określenie obu uczestniczących plików. Na potrzeby tej dyskusji plik odwołujący się będzie nazywany stroną wywołującą (zwykle jest to wywołujący plik SWF), a drugi plik będzie nazywany stroną wywoływaną (zwykle jest to wywoływany plik SWF lub plik, do którego w inny sposób uzyskiwany jest dostęp). Gdy plik siteA.swf odwołuje się do pliku siteB.swf, siteA.swf jest stroną wywołującą, a siteB.swf jest stroną wywoływaną, co ilustruje poniższy rysunek:

Uprawnienia międzydomenowe ustanowione za pomocą metody Security.allowDomain() są asymetryczne. W poprzednim przykładzie plik siteA.swf może odwołać się do pliku siteB.swf, ale plik siteB.swf nie może odwołać się do siteA.swf, ponieważ siteA.swf nie wywołał metody Security.allowDomain() w celu nadania plikom SWF w witrynie siteB.com uprawnień do odwoływania się do siebie. Możliwe jest ustanowienie uprawnień symetrycznych poprzez wywołanie metody Security.allowDomain() w obu plikach SWF.

Oprócz zapewnienia plikom SWF ochrony przed odwołaniami pochodzącymi z innych plików SWF i domen, program Flash Player chroni pliki SWF przed wywołaniami z innych domen inicjowanymi przez pliki HTML. Wywołanie skryptowe z HTML do SWF może mieć miejsce, gdy za pomocą metody ExternalInterface.addCallback() ustanowiono funkcje wywołania zwrotnego. Gdy wywołanie skryptowe z kodu HTML do SWF przekracza granicę domeny, docelowy plik SWF musi wcześniej wywołać metodę Security.allowDomain() , podobnie jak dla wywołań z innego pliku SWF — w przeciwnym razie operacja nie powiedzie się. Więcej informacji zawiera sekcja Mechanizmy nadzoru programistów .

Ponadto program Flash Player jest wyposażony w mechanizmy chroniące przed wywołaniami skryptowymi z pliku SWF do kodu HTML. Więcej informacji zawiera sekcja Kontrola żądań wychodzących do adresów URL .

Zabezpieczenia stołu montażowego

Niektóre właściwości i metody obiektu Stage są dostępne dla każdej ikonki lub klipu filmowego na liście wyświetlania.

Jednak obiekt Stage ma swojego „właściciela”: jest nim pierwszy załadowany plik SWF. Domyślnie następujące metody i właściwości obiektu Stage są dostępne tylko dla plików SWF znajdujących się w tym samym obszarze izolowanym, co właściciel obiektu Stage:

Właściwości

Metody

align

addChild()

displayState

addChildAt()

frameRate

addEventListener()

height

dispatchEvent()

mouseChildren

hasEventListener()

numChildren

setChildIndex()

quality

willTrigger()

scaleMode

showDefaultContextMenu

stageFocusRect

stageHeight

stageWidth

tabChildren

textSnapshot

width

Aby plik SWF należący do innego obszaru izolowanego, co właściciel obiektu Stage, miał dostęp do tych właściwości i metod, plik SWF będący właścicielem obiektu Stage musi wywołać metodę Security.allowDomain() i zezwolić na dostęp domenie zewnętrznego obszaru izolowanego. Więcej informacji zawiera sekcja Mechanizmy nadzoru programistów .

Szczególny przypadek stanowi właściwość frameRate — każdy plik SWF może ją odczytać. Jednak tylko pliki w obszarze izolowanym właściciela obiektu Stage (lub objęte uprawnieniami nadanymi za pomocą metody Security.allowDomain() ) mogą zmieniać wartość tej właściwości.

Obowiązują także ograniczenia dotyczące metod removeChildAt() i swapChildrenAt() obiektu Stage, jednak różnią się one od pozostałych ograniczeń. Aby móc wywołać te metody, kod musi znajdować się w tej samej domenie, co właściciel docelowych obiektów podrzędnych, a nie w tej samej domenie co właściciel obiektu Stage. Odpowiednio, obiekty podrzędne mogą wywoływać metodę Security.allowDomain() w celu udzielenia dostępu innej domenie.

Przechodzenie przez listę wyświetlania

Ograniczono możliwość dostępu z pliku SWF do obiektów wyświetlanych załadowanych z innych obszarów izolowanych. Aby plik SWF mógł uzyskać dostęp do obiektu wyświetlanego utworzonego przez inny plik SWF w innym obszarze izolowanym, docelowy plik SWF musi wywołać metodę Security.allowDomain() , aby zezwolić na dostęp domenie wywołującego pliku SWF. Więcej informacji zawiera sekcja Mechanizmy nadzoru programistów .

Aby uzyskać dostęp do obiektu Bitmap załadowanego przez obiekt Loader, na serwerze źródłowym pliku obrazu musi istnieć plik strategii URL i ten plik strategii musi zezwalać na dostęp domenie pliku SWF próbującego skorzystać z obiektu Bitmap (patrz Internetowe elementy sterujące (pliki zasad) ).

Obiekt LoaderInfo będący odpowiednikiem załadowanego pliku (oraz obiektu Loader) zawiera następujące trzy właściwości, które opisują relację między obiektem ładowanym a obiektem Loader: childAllowsParent , parentAllowsChild oraz sameDomain .

Zabezpieczenia zdarzeń

Zdarzenia związane z listą wyświetlania podlegają ograniczeniom dostępu uzależnionym od tego, do którego obszaru izolowanego należy obiekt wywołujący dane zdarzenie. Zdarzenie na liście wyświetlania przechodzi przez fazy propagacji i przechwytywania (opisane w sekcji Obsługa zdarzeń ). W fazach propagacji i przechwytywania zdarzenie migruje ze źródłowego obiektu wyświetlanego przez nadrzędne obiekty wyświetlane na liście wyświetlania. Jeśli obiekt nadrzędny znajduje się w innym obszarze izolowanym niż obiekt źródłowy, faza przechwytywania i propagacji kończy się poniżej tego obiektu nadrzędnego, chyba że między właścicielem obiektu nadrzędnego a właścicielem obiektu źródłowego istnieje relacja wzajemnego zaufania. Taką relację wzajemnego zaufania można ustanowić w następujący sposób:

  1. Plik SWF będący właścicielem obiektu nadrzędnego musi wywołać metodę Security.allowDomain() , aby zaufać domenie pliku SWF będącego właścicielem obiektu źródłowego.

  2. Plik SWF będący właścicielem obiektu źródłowego musi wywołać metodę Security.allowDomain() , aby zaufać domenie pliku SWF będącego właścicielem obiektu nadrzędnego.

Obiekt LoaderInfo będący odpowiednikiem załadowanego pliku (oraz obiektu Loader) zawiera następujące dwie właściwości, które opisują relację między obiektem ładowanym a obiektem Loader: childAllowsParent i parentAllowsChild .

W przypadku zdarzeń wywoływanych z obiektów innych niż obiekty wyświetlane nie istnieją mechanizmy kontrolne zabezpieczeń ani inne ograniczenia związane z bezpieczeństwem.