API-интерфейсы сетевого подключения можно ограничить двумя способами. С целью предотвращения вредоносной активности блокируется доступ к традиционно зарезервированным портам. Эту блокировку нельзя отменить с помощью кода. Чтобы контролировать доступ SWF-файла к сетевым подключениям через другие порты, можно настроить свойство
allowNetworking
.
Заблокированные порты
Проигрыватели Flash Player и Adobe AIR, как и обозреватели, имеют ограничения для HTTP-доступа к определенным портам. Запрещено отправлять HTTP-запросы определенным стандартным портам, которые традиционно используются для серверов, не использующих протокол HTTP.
Данные ограничения применяются ко всем API-интерфейсам, которые обращаются к сетевым URL-адресам. Единственное исключение составляют API-интерфейсы, напрямую вызывающие сокеты, например
Socket.connect()
и
XMLSocket.connect()
, или вызывают метод
Security.loadPolicyFile()
, в который загружается файл политики сокетов. Подключения к сокетам разрешаются или запрещаются с помощью файлов политики сокетов, размещаемых на целевом сервере.
Ниже перечислены API-интерфейсы ActionScript 3.0, на которые распространяется блокировка портов:
FileReference.download(),
FileReference.upload()
,
Loader.load()
,
Loader.loadBytes()
,
navigateToURL()
,
NetConnection.call()
,
NetConnection.connect()
,
NetStream.play()
,
Security.loadPolicyFile()
,
sendToURL()
,
Sound.load()
,
URLLoader.load()
,
URLStream.load()
Кроме того, блокировка портов распространяется на импорт через общую библиотеку, использование тега
<img>
в текстовых полях и загрузку SWF-файлов в HTML-страницу с использованием тегов
<object>
и
<embed>
.
Кроме того, блокировка портов распространяется на использование тега
<img>
в текстовых полях и загрузку SWF-файлов в HTML-страницу с использованием тегов
<object>
и
<embed>
.
Ниже перечислены заблокированные порты:
HTTP: 20 (ftp data), 21 (ftp control)
HTTP и 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)
Использование параметра allowNetworking
Можно контролировать использование SWF-файлом сетевого подключения путем установки параметра
allowNetworking
для тегов
<object>
и
<embed>
на странице HTML, содержащей SWF-содержимое.
Ниже перечислены возможные значения тега
allowNetworking
:
-
"all"
(по умолчанию): в SWF-файле разрешены все API-интерфейсы сетевых подключений;
-
"internal"
: SWF-файл не может вызывать API-интерфейсы навигации в обозревателе или взаимодействия с обозревателем, описанные далее в этом разделе, однако может вызывать другие API-интерфейсы сетевого подключения;
-
"none"
: SWF-файл не может вызывать API-интерфейсы навигации в обозревателе или взаимодействия с обозревателем, описанные далее в этом разделе, и использовать API-интерфейсы взаимодействия между SWF-файлами, также описанными далее.
Параметр
allowNetworking
предназначен для использования в основном в тех случаях, когда SWF-файл и содержащая его HTML-страница находятся в разных доменах. Значения
"internal"
и
"none"
не рекомендуется использовать, когда загружаемый SWF-файл находится в том же домене, что и содержащие его HTML-страницы, так как нельзя гарантировать, что он будет всегда загружаться на только на предназначенную для него HTML-страницу. Недоверенные стороны могут загружать SWF-файл с вашего домена без содержащей его HTML-страницы, и в этом случае ограничение
allowNetworking
будет работать не так, как задумывалось.
Вызов запрещенного API-интерфейса выдает исключение SecurityError.
Добавьте параметр
allowNetworking
и присвойте ему значение в тегах
<object>
и
<embed>
на HTML-странице, содержащей ссылку на SWF-файл, как показано в следующем примере.
<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>
HTML-страница может также выполнить сценарий для создания тегов внедрения SWF. Такой сценарий нужно изменить, задав нужные значения для свойства
allowNetworking
. HTML-страницы, созданные в Adobe Flash Professional и Adobe Flash Builder, используют функцию
AC_FL_RunContent()
для встраивания ссылок на SWF-файлы. Добавьте настройки параметра
allowNetworking
в сценарий, как показано ниже.
AC_FL_RunContent( ... "allowNetworking", "none", ...)
Следующие API-интерфейсы запрещены, когда параметр
allowNetworking
имеет значение
"internal"
:
navigateToURL()
,
fscommand()
,
ExternalInterface.call()
А когда параметр
allowNetworking
имеет значение
"none"
, помимо перечисленных выше API-интерфейсов также запрещаются следующие:
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()
Даже если выбранное значение параметра
allowNetworking
позволяет SWF-файлу использовать API-интерфейс сетевого подключения, могут существовать другие ограничения, связанные с изолированными программными средами (см. раздел
Изолированные программные среды
).
Когда параметр
allowNetworking
имеет значение
"none"
, нельзя ссылаться на внешнее мультимедийное содержимое в теге
<img>
свойства
htmlText
объекта TextField (иначе выдается исключение SecurityError).
Когда параметр
allowNetworking
имеет значение
"none"
, символ из импортированной общей библиотеки, добавленной в инструмент Flash Professional (не в ActionScript), блокируется во время выполнения.
|
|
|