Ograniczenia dostępu do sieciowych interfejsów API

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

Dostęp do sieciowych interfejsów API można ograniczyć na dwa sposoby. Aby zablokować działanie kodu złośliwego, blokowany jest dostęp do powszechnie rezerwowanych portów; nie można zastąpić tych bloków własnym kodem. W celu kontrolowania dostępu pliku SWF do sieci w kontekście innych portów, należy skorzystać z ustawienia allowNetworking .

Zablokowane porty

Zarówno w programie Flash Player jak i w środowisku Adobe AIR dostęp do pewnych portów HTTP zablokowano podobnie, jak w przeglądarkach. Żądania HTTP do niektórych standardowych portów, używanych powszechnie dla serwerów typu innego niż HTTP, nie są realizowane.

Omawiane blokady portów dotyczą wszystkich API uzyskujących dostęp do sieciowych adresów URL. Jedynym wyjątkiem jest API, wywołujący bezpośrednio gniazda, taki jak Socket.connect() i XMLSocket.connect() , lub wywołujący metodę Security.loadPolicyFile() do której ładowany jest plik strategii gniazda. Połączenia z gniazdem są akceptowane albo odrzucane przez użycie pliku strategii gniazda na serwerze docelowym.

Poniższa lista zawiera interfejsy API ActionScript 3.0 objęte blokowaniem portów:

FileReference.download(), FileReference.upload() , Loader.load() , Loader.loadBytes() , navigateToURL() , NetConnection.call() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , sendToURL() , Sound.load() , URLLoader.load() , URLStream.load()

Blokowanie portów dotyczy równie importowania biblioteki Shared Library, korzystania ze znacznika <img> w polach tekstowych oraz ładowania plików SWF na stronie HTML za pomocą znaczników <object> i <embed> .

Blokowanie portów dotyczy równie korzystania ze znacznika <img> w polach tekstowych oraz ładowania plików SWF na stronie HTML za pomocą znaczników <object> i <embed> .

Oto lista blokowanych portów:

HTTP: 20  (dane ftp), 21 (kontrolny ftp)

HTTP i FTP: 1 (tcpmux), 7 (echo), 9 (discard), 11 (systat), 13 (daytime), 15 (netstat), 17 (qotd), 19 (chargen), 22 (ssh), 23 (telnet), 25 (smtp), 37 (time), 42 (name), 43 (nicname), 53 (domain), 77 (priv-rjs), 79 (finger), 87 (ttylink), 95 (supdup), 101 (hostriame), 102 (iso-tsap), 103 (gppitnp), 104 (acr-nema), 109 (pop2), 110 (pop3), 111 (sunrpc), 113 (auth), 115 (sftp), 117 (uucp-path), 119 (nntp), 123 (ntp), 135 (loc-srv / epmap), 139 (netbios), 143 (imap2), 179 (bgp), 389 (ldap), 465 (smtp+ssl), 512 (print / exec), 513 (login), 514 (shell), 515 (printer), 526 (tempo), 530 (courier), 531 (chat), 532 (netnews), 540 (uucp), 556 (remotefs), 563 (nntp+ssl), 587 (smtp), 601 (syslog), 636 (ldap+ssl), 993 (ldap+ssl), 995 (pop3+ssl), 2049 (nfs), 4045 (lockd), 6000 (x11)

Korzystanie z parametru allowNetworking

Nadzór nad dostępem pliku SWF do funkcji komunikacji sieciowej jest możliwy przez ustawienie parametru allowNetworking w znacznikach <object> i <embed> na stronie HTML zawierającej treść SWF.

Możliwe wartości parametru allowNetworking to:

  • "all" (domyślna) — brak jest ograniczeń w komunikacji interfejsów API z plikiem SWF.

  • "internal" — plik SWF może nie wywoływać elementów nawigacyjnych przeglądarki czy interfejsów API interakcji z przeglądarką, wymienionych dalej w tej sekcji, lecz może wywoływać dowolny inny interfejs sieciowy API.

  • "none" — plik SWF może nie wywoływać elementów nawigacyjnych przeglądarki czy interfejsów API interakcji z przeglądarką, wymienionych dalej w tej sekcji, i nie może używać żadnych sieciowych interfejsów do komunikacji SWF-SWF, również wymienionych poniżej.

Parametr allowNetworking jest przeznaczony głównie do użytku, gdy plik SWF oraz zawierająca go strona HTML pochodzą z różnych domen. Używanie wartości "internal" czy "none" nie jest zalecane, gdy plik SWF jest ładowany z tej samej domeny, co zawierające go strony HTML, ponieważ nie jest możliwe zapewnienie, że plik SWF będzie zawsze ładowany z żądaną stroną HTML. Niezaufane treści mogą ładować plik SWF z domeny programisty bez zawierającej go strony HTML, w którym to przypadku ograniczenie allowNetworking nie będzie działać zgodnie z życzeniem.

Wywołanie zabronionego interfejsu API powoduje wygenerowanie wyjątku SecurityError.

Należy dodać parametr allowNetworking , ustawiając jego wartość w znacznikach <object> i <embed> na stronie HTML zawierającej odwołanie do pliku SWF, zgodnie z poniższym przykładem:

<object classic="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
    Code base="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0"  
    width="600" height="400" ID="test" align="middle"> 
<param name="allowNetworking" value="none" /> 
<param name="movie" value="test.swf" /> 
<param name="bgcolor" value="#333333" />  
<embed src="test.swf" allowNetworking="none" bgcolor="#333333"  
    width="600" height="400" 
    name="test" align="middle" type="application/x-shockwave-flash"  
    pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
</object>

Strona HTML może również korzystać ze skryptu w celu wygenerowania znaczników osadzających SWF. W takim przypadku należy zmodyfikować skrypt w taki sposób, aby wstawiał poprawne ustawienia allowNetworking . Strony HTML wygenerowane przez programy Adobe Flash Professional i Adobe Flash Builder korzystają z funkcji AC_FL_RunContent() w celu osadzenia odwołań do plików SWF. Należy dodać do skryptu ustawienia parametru allowNetworking , tak jak w poniższym przykładzie:

AC_FL_RunContent( ... "allowNetworking", "none", ...)

Dostęp do poniższych interfejsów API jest ograniczony, gdy parametr allowNetworking jest ustawiony na wartość "internal" :

navigateToURL() , fscommand() , ExternalInterface.call()

Jeśli parametr allowNetworking jest ustawiony na wartość "none" , poza interfejsami API na powyższej liście zablokowane są również następujące:

sendToURL() , FileReference.download() , FileReference.upload() , Loader.load() , LocalConnection.connect() , LocalConnection.send() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , SharedObject.getLocal() , SharedObject.getRemote() , Socket.connect() , Sound.load() , URLLoader.load() , URLStream.load() , XMLSocket.connect()

Nawet, jeśli wybrane ustawienie allowNetworking pozwala na korzystanie przez plik SWD z sieciowego interfejsu API, mogą występować inne ograniczenia zależne od ograniczeń obszaru izolowanego zabezpieczeń (patrz Obszary izolowane ).

Po ustawieniu dla parametru allowNetworking wartości "none" nie jest możliwe odwoływanie się do multimediów zewnętrznych w znaczniku <img> właściwości htmlText obiektu TextField (generowany jest wyjątek SecurityError).

W przypadku ustawienia parametru allowNetworking na wartość "none" , symbol z importowanej biblioteki współużytkowanej dodano w programie Flash Professional (nie ActionScript) jest blokowany w czasie wykonywania.