Ładowanie danych

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

Treści środowisk Flash Player i AIR mogą wymieniać dane z serwerami. Ładowanie danych różni się od ładowania multimediów, ponieważ załadowane informacje pojawiają się jako obiekty programowe, a nie są wyświetlane jako multimedia. Przeważnie treści mogą ładować dane z tej samej domeny, z której pochodzą. Jednak zwykle wymagają plików strategii w celu ładowania danych z innych domen (patrz Internetowe elementy sterujące (pliki zasad) ).

Uwaga: Treści działające w obszarze izolowanym aplikacji AIR nigdy nie są udostępniane ze zdalnej domeny (chyba, że programista celowo zaimportuje zdalne treści do obszaru izolowanego aplikacji), dlatego nie mogą uczestniczyć w rodzajach ataków, przed którymi chronią pliki strategii. Treści środowiska AIR w obszarze izolowanym aplikacji nie są ograniczone pod względem ładowania danych przez pliki strategii. Natomiast treści środowiska AIR w innych obszarach izolowanych podlegają ograniczeniom tutaj przedstawionym.

Korzystanie z klas URLLoader i URLStream

Możliwe jest ładowanie takich danych, jak pliki XML lub pliki tekstowe. Metody load() klas URLLoader i URLStream podlegają uprawnieniom określonym w pliku strategii URL.

Przy próbie użycia metody load() do załadowania treści z domeny innej niż domena kodu wywołującego metodę środowisko wykonawcze sprawdza, czy na serwerze ładowanych zasobów istnieje plik strategii URL. Jeśli plik strategii istnieje i udziela uprawnień dostępu domenie ładujących treści, to załadowanie danych będzie możliwe.

Nawiązywanie połączeń z gniazdami

Domyślnie środowisko wykonawcze poszukuje pliku strategii gniazd udostępnianego z portu numer 843. W przypadku plików strategii URL ten plik jest nazywany nadrzędnym plikiem strategii .

Gdy pliki strategii po raz pierwszy pojawiły się w programie Flash Player w wersji 6, nie uwzględniano jeszcze obsługi plików strategii gniazd. Połączenia z serwerami w gniazdach były autoryzowane przez plik strategii w domyślnej lokalizacji na serwerze HTTP przez port 80 tego samego hosta, na którym działał serwer w gnieździe. Program Flash Player 9 nadal uwzględnia taką możliwość, ale plik Flash Player 10 już nie. W programie Flash Player 10 połączenia z gniazdami mogą być autoryzowane wyłącznie przez pliki strategii gniazd.

Podobnie jak pliki zasad URL, pliki zasad gniazd obsługują instrukcję metazasady, która określa porty udostępniające pliki zasad. Jednak domyślną metastrategią gniazd jest strategia „all” (wszystkie), a nie „master-only” (tylko główne). A zatem, o ile główny plik strategii nie określa bardziej restrykcyjnych ustawień, program Flash Player zakłada, że każde gniazdo na hoście może udostępniać plik strategii gniazd.

Dostęp do gniazd o połączenia z gniazdami XML są domyślnie wyłączone, nawet jeśli docelowe gniazdo połączenia jest w tej samej domenie, co plik SWF. Można zezwolić na dostęp na poziomie gniazd, udostępniając plik strategii gniazd z dowolnej z następujących lokalizacji:

  • port 843 (lokalizacja głównego pliku strategii);

  • ten sam port, co używany przez główne połączenie z gniazdem;

  • port inny niż używany przez główne połączenie z gniazdem.

Domyślnie program Flash Player poszukuje pliku strategii gniazd w porcie 843 i w tym samym porcie, co główne połączenie z gniazdem. Jeśli plik strategii gniazd ma być udostępniony z innego portu, plik SWF powinien wywołać metodę Security.loadPolicyFile() .

Składnia pliku strategii gniazd jest taka sama, jak składnia pliku strategii URL, z tym że plik ten musi również określać porty, którym ma być udzielone zezwolenie na dostęp. Gdy plik strategii jest udostępniany z portu o numerze niższym niż 1024, plik ten może udzielać zezwolenia dowolnym portom; gdy plik strategii jest udostępniany z portu o numerze 1024 lub wyższym, może udzielać zezwolenia tylko portom o numerach od 1024 wzwyż. Dozwolone porty określa się w atrybucie to-ports w znaczniku <allow-access-from> . Dozwolone jest korzystanie z pojedynczych numerów portów, zakresów numerów, a także z symboli wieloznacznych.

Oto przykładowy plik strategii gniazd:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<!-- Policy file for xmlsocket://socks.mysite.com --> 
<cross-domain-policy>  
    <allow-access-from domain="*" to-ports="507" />  
    <allow-access-from domain="*.example.com" to-ports="507,516" />  
    <allow-access-from domain="*.example.org" to-ports="516-523" />  
    <allow-access-from domain="adobe.com" to-ports="507,516-523" />  
    <allow-access-from domain="192.0.34.166" to-ports="*" />  
</cross-domain-policy> 

Aby pobrać plik strategii gniazd z portu 843 lub z tego samego portu, którego używa główne połączenie z gniazdem, należy wywołać metodę Socket.connect() lub XMLSocket.connect() . Program Flash Player najpierw sprawdza, czy główny plik strategii jest udostępniany w porcie 843. Jeśli znajdzie taki plik, sprawdza czy zawiera on instrukcję metastrategii zabraniającą udostępniania plików strategii gniazd na porcie docelowym. Jeśli dostęp nie jest zabroniony, program Flash Player najpierw poszukuje odpowiedniej instrukcji allow-access-from w głównym pliku strategii. Jeśli nie znajdzie takiej instrukcji, poszukuje pliku strategii gniazd w tym samym porcie, który obsługuje główne połączenie z gniazdem.

Aby pobrać plik strategii gniazd z innej lokalizacji, należy najpierw wywołać metodę Security.loadPolicyFile() , używając specjalnej składni "xmlsocket" przedstawionej poniżej:

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Metodę Security.loadPolicyFile() należy wywołać przed wywołaniem metody Socket.connect() lub XMLSocket.connect() . Teraz program Flash Player czeka z zezwoleniem na główne połączenie, aż spełnione zostanie żądanie pobrania pliku strategii. Jeśli jednak główny plik strategii informuje, że lokalizacja docelowa nie może udostępniać plików strategii, wywołanie loadPolicyFile() nie odnosi skutku, nawet jeśli istnieje plik strategii w tej lokalizacji.

W przypadku implementowania serwera gniazd, jeśli chcemy udostępnić plik strategii gniazd, musimy zdecydować, czy plik strategii będzie udostępniany w tym samym porcie, który przyjmuje połączenia główne, czy też w innym porcie. W każdym przypadku serwer przed wysłaniem odpowiedzi musi poczekać na pierwszą transmisję z klienta.

Gdy program Flash Player żąda pliku strategii, zawsze wysyła następujący ciąg znaków natychmiast po ustanowieniu połączenia:

<policy-file-request/>

Gdy serwer odbierze ten ciąg, może wysłać plik strategii. Żądanie programu Flash Player jest zawsze zakończone bajtem null, a odpowiedź z serwera również musi kończyć się bajtem null.

Nie należy zakładać, że to samo połączenie będzie używane dla żądania pliku strategii i jako połączenie główne. Po przesłaniu pliku strategii należy zamknąć połączenie. Jeśli połączenie nie zostanie zamknięte, program Flash Player zamknie połączenie z plikiem strategii przed ponownym nawiązaniem połączenia w celu zestawienia połączenia głównego.

Ochrona danych

Aby ochronić dane przesyłane za pośrednictwem Internetu przed modyfikacją i dostępem osób nieuprawnionych, można zastosować protokół Transport Layer Security (TLS) lub Socket Layer Security (SSL) na serwerze, z którego pochodzą dane. Z serwerem takim można łączyć się za pośrednictwem protokołu HTTPS.

W aplikacjach przeznaczonych dla środowiska AIR 2 i nowszych wersji można również chronić komunikację przez gniazda TCP. Klasa SecureSocket umożliwia zainicjowanie połączenia przez gniazdo z serwerem gniazd, na którym używany jest protokół TLS (wersja 1) lub SSL (wersja 4).

Wysyłanie danych

Wysyłanie danych następuje, gdy kod wysyła dane na serwer lub zasób. Wysyłanie danych jest zawsze dozwolone w przypadku treści z domeny sieciowej. Lokalny plik SWF może wysyłać dane do adresów sieciowych wyłącznie, jeśli działa w sieciowym, lokalnym obszarze izolowanym lokalnie zaufanym lub obszarze izolowanym aplikacji AIR. Więcej informacji zawiera sekcja Lokalne obszary izolowane .

Funkcja flash.net.sendToURL() umożliwia wysłanie danych do adresu URL. Istnieją także inne metody wysyłające żądania do adresów URL. Należą do nich metody ładujące, takie jak Loader.load() i Sound.load() , oraz metody ładujące dane, takie jak URLLoader.load() i URLStream.load() .

Wysyłanie i pobieranie plików

Metoda FileReference.upload() rozpoczyna wysyłanie pliku wybranego przez użytkownika na serwer zdalny. Przed wywołaniem metody FileReference.upload() należy wywołać metodę FileReference.browse() lub FileReferenceList.browse() .

Kod, który inicjuje metodę FileReference.browse() lub FileReferenceList.browse() , może zostać wywołany tylko w odpowiedzi na zdarzenie myszy lub klawiatury. W przypadku wywołania w innych sytuacjach program Flash Player 10 lub nowszy wygeneruje wyjątek. Jednakże do wywołania tych metod z obszaru izolowanego aplikacji AIR nie jest wymagane zdarzenie inicjowane przez użytkownika.

Wywołanie metody FileReference.download() powoduje otwarcie okna dialogowego, w którym użytkownik może wybrać i pobrać plik z serwera zdalnego.

Uwaga: Jeśli serwer wymaga uwierzytelnienia użytkownika, tylko pliki SWF uruchomione w przeglądarce — tj. za pomocą wtyczki przeglądarki lub elementu sterującego ActiveX — mogą dostarczyć okno dialogowe w celu zapytania o nazwę i hasło użytkownika dla uwierzytelniania; i tylko w przypadku operacji pobierania. Program Flash Player nie umożliwia wysyłanie plików na serwer wymagający uwierzytelnienia użytkownika.

Wysyłanie i pobieranie danych nie jest dozwolone, jeśli wywołujący plik SWF znajduje się w obszarze izolowanym lokalnym z systemem plików.

Domyślnie plik SWF nie może zainicjować wysyłanie do serwera ani pobierania z serwera innego niż własny. Plik SWF możne wysyłać dane na inny serwer lub pobierać z innego serwera, jeśli ten serwer nada odpowiednie uprawnienia domenie wywołującej plik SWF.