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

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-файла.