Загрузка данных

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

Содержимое Flash Player и AIR может обмениваться данными с серверами. Операция загрузки данных отличается от загрузки мультимедийного содержимого, так как загруженная информация появляется непосредственно в программных объектах, а не отображается в качестве мультимедийного содержимого. Как правило, содержимое может загружать данные из того же домена, в котором создано содержимое. Однако для содержимого обычно требуются файлы политик для загрузки данных из других доменов (см. раздел «Элементы управления веб-сайта (файлы политики)»).

Примечание. Содержимое, выполняемое в изолированной программной среде приложения AIR, никогда не обслуживается из удаленного домена (если только разработчик намеренно не импортировал удаленное содержимое в изолированную программную среду приложения), поэтому оно не участвует в типах атак, от которых защищают файлы политик. В отношении содержимого AIR, находящегося в изолированной программной среде приложения, не накладываются ограничения на загрузку данных на основе файлов политик. Однако в отношении содержимого AIR в других изолированных программных средах действуют описанные здесь ограничения.

Использование классов URLLoader и URLStream

Можно загружать такие данные, как XML или текстовый файлы. Выполнение методов load() классов URLLoader и URLStream регулируется правами, определенными в файлах политики URL-адресов.

Если метод load() используется для загрузки содержимого не из того домена, в котором находится код, вызывающий метод, среда выполнения проверяет файл политики URL-адресов на сервере загружаемых ресурсов. Если на сервере есть такой файл и он предоставляет доступ домену загружаемого содержимого, можно загрузить данные.

Подключение к сокетам

Среда выполнения по умолчанию ищет файл политики сокетов из порта 843. Как и в случае файлов политики URL, этот файл называется основным файлом политики.

Когда файлы политики были впервые введены в версии Flash Player 6, файлы политики сокетов еще не поддерживались. Подключения к сокет-серверам разрешались файлом политики, который находился в местоположении по умолчанию на HTTP-сервере с портом 80 того же хоста, что и сокет-сервер. Проигрыватель Flash Player 9 еще поддерживает эту возможность, а Flash Player 10 уже нет. В проигрывателе Flash Player 10 подключения к сокетам разрешаются только с помощью файлов политики сокетов.

Как и файлы политики URL-адресов, файлы политики сокетов поддерживают использование метаполитики, определяющей порты, у которых могут быть файлы политик. Однако вместо метаполитики «master-only» (только основной) в файлах политики сокетов по умолчанию используется метаполитика «all» (все). Таким образом, если в основном файле политики не установлены более строгие ограничения, проигрыватель Flash Player предполагает, что файл политики сокетов может быть у любого порта узла.

Доступ к подключениям к сокетам и XML-сокетам отключен по умолчанию, даже если сокет находится в том же домене, что и подключающийся SWF-файл. Чтобы разрешить доступ на уровне сокетов, можно поместить файл политики сокетов в любом из следующих местоположений:

  • порт 843 (местоположение основного файла политики);

  • тот же порт, что и для основного подключения к сокету;

  • другой порт.

По умолчанию Flash Player ищет файл политики сокетов у порта 843 и у того же порта, который используется для основного подключения к сокету. Чтобы передавать файл политики сокетов через другой порт, SWF-файл должен вызвать метод Security.loadPolicyFile().

Файл политики сокетов имеет тот же синтаксис, что и файл политики URL-адресов, только в нем также должны быть указаны порты, для которых предоставляется доступ. Если файл политик сокетов передается через порт с номером меньше 1024, он может выдавать разрешение на доступ к любому порту; если файл политик передается через порт с номером 1024 и выше, он может выдавать разрешение на доступ только к другим портам с номером 1024 или выше. Разрешенные порты указываются атрибутом to-ports для тега <allow-access-from>. Разрешено использование отдельных номеров портов, диапазонов портов и знаков подстановки.

Ниже приводится пример файла политики сокетов.

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

Чтобы получить файл политики сокетов через порт 843 или через тот же порт, через который установлено основное подключение к сокету, нужно вызвать метод Socket.connect() или XMLSocket.connect(). Проигрыватель Flash Player сначала проверяет основной файл политики у порта 843. Если он его находит, то проверяет наличие метаполитики, запрещающей передачу файлов политики сокетов через целевой порт. Если доступ не запрещен, проигрыватель Flash Player сначала ищет соответствующий атрибут allow-access-from в основном файле политики. Если он его не находит, то пытается получить файл политики через порт основного подключения к сокету.

Чтобы получить файл политики сокетов в другом местоположении, сначала нужно вызвать метод Security.loadPolicyFile() со специальным синтаксисом "xmlsocket", как показано ниже.

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

Вызовите метод Security.loadPolicyFile() перед вызовом метода Socket.connect() или XMLSocket.connect(). После этого проигрыватель Flash Player ожидает выполнения запроса файла политики, прежде чем принять решение относительно основного подключения. Однако, если в основном файле политики указано, что в данном местоположении не может находиться файл политики, то вызов метода loadPolicyFile() не даст результатов, даже если там будет файл политики.

Если разворачивается сокет-сервер и требуется добавить файл политики сокетов, нужно определиться, через какой порт будет передаваться этот файл: через порт основных подключений или через другой. В любом случае сервер должен дождаться первой передачи данных от клиента, прежде чем отправить ответ.

Когда проигрыватель Flash Player запрашивает файл политики, он всегда передает следующую строку после установки подключения:

<policy-file-request/>

Получив эту строку, сервер может передать файл политики. Запрос проигрывателя Flash Player всегда заканчивается нулевым байтом, и ответ сервера также должен заканчиваться нулевым байтом.

Не пытайтесь использовать одно и то же подключение и для запроса файла политики, и для основного подключения. Разорвите подключение после передачи файла политики. Если этого не сделать, проигрыватель Flash Player разрывает подключение, установленное для проверки файла политики, и только после этого устанавливает основное подключение.

Защита данных

Чтобы защитить данные от перехвата и изменения при передаче через Интернет, можно использовать протоколы TLS и SSL на сервере, с которого отправляются данные. К серверу можно подключаться с помощью протокола HTTPS.

В приложениях, созданных для среды выполнения AIR 2 и долее поздних версий, также можно защитить обмен данными через сокет TCP. Класс SecureSocket позволяет установить подключение к серверу сокетов, который использует TLS версии 1 или SSL версии 4.

Отправка данных

Отправка данных выполняется, когда код отправляет данные на сервер или в ресурс. Отправка данных всегда разрешена для содержимого из сетевого домена. Локальный SWF-файл может отправлять данные на сетевые адреса, только если он находится в локальной доверенной изолированной программной среде, локальной изолированной программной среде с сетевым подключением или изолированной программной среде приложения AIR. Дополнительные сведения см. в разделе «Локальные изолированные программные среды».

Отправлять данные на URL-адрес можно с помощью функции flash.net.sendToURL(). Другие методы также отправляют запросы URL-адресам. К их числу относятся методы загрузки, такие как Loader.load() и Sound.load() и методы загрузки данных, такие как URLLoader.load() и URLStream.load().

Отправка и загрузка файлов

Метод FileReference.upload() запускает загрузку выбранного пользователем файла на удаленный сервер. Перед тем как вызвать метод FileReference.upload(), следует вызвать метод FileReference.browse() или FileReferenceList.browse().

Код, вызывающий метод FileReference.browse() или FileReferenceList.browse(), можно вызвать только в ответ на событие мыши или клавиатуры. При вызове этого кода в других ситуациях проигрыватель Flash Player 10 и более поздних версий выдает исключение. Однако для инициированного пользователем события не требуется вызывать эти методы из изолированной программной среды приложения AIR.

Вызов метода FileReference.download() открывает диалоговое окно, в котором пользователь может загрузить файл с удаленного сервера.

Примечание. Если ваш сервер требует проверки подлинности пользователей, только Flash-приложения, запущенные в обозревателе (то есть с использованием дополнительного модуля обозревателя или элемента управления ActiveX), могут представить пользователю диалоговое окно для ввода имени пользователя и пароля (для проверки подлинности) и только потом перейти к загрузкам. Проигрыватель Flash Player не разрешает отправку данных на сервер, требующий проверки подлинности.

Отправка и загрузка не разрешаются, если вызывающий SWF-файл находится в локальной изолированной программной среде файловой системы.

По умолчанию SWF-файл не может инициировать отправку содержимого на другой сервер или загрузку с другого сервера. SWF-файл может выполнять эти операции, только если на этом сервере имеется файл политики, предоставляющий разрешение для домена вызывающего SWF-файла.