Ограничение API-интерфейсов сетевого подключения

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

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), блокируется во время выполнения.