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.
|
|
|