Март 2011

Руководство по actionscript. часть 3, стр. 093

Файл политики безопасности может содержать любое количество тегов . Например, следующий файл политики безопасности определяет три разрешенных источника: examplel. com, example2.com и example3.com.




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>







Когда символ * используется в значении атрибута domain, он обозначает подстановочный символ. Например, следующий файл политики безопасности разрешает доступ для сайта examplel. com и его любого поддомена, независимо от уровня вложенности (например, games. examplel. com, driving. games. examplel. com и т. д.):




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>



Сам по себе символ * разрешает доступ для всех источников:




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>



Чтобы включить локальную область действия в список разрешенных источников, файл политики безопасности должен явным образом установить доверие для всех источников. Для этого должен быть указан символ * (любой источник) в качестве значения атрибута domain. Таким образом, чтобы локальные SWF-файлы с поддержкой сети могли загружать XML-файлы с сайта, атрибуту domain файла политики безопасности этого сайта должно быть установлено значение *.

Руководство по actionscript. часть 3, стр. 094

Размещение файла политики безопасности

После создания файл политики безопасности должен быть размещен в том же удаленном регионе (то есть домене или IP-адресе), где находится ресурс, к которому разрешается доступ. Например, если файл политики безопасности разрешает доступ к содержимому сайта www. example. com, файл политики безопасности должен быть также размещен на сайте www. example. com.

Набор ресурсов, к которым файл политики безопасности разрешает доступ, определяется конкретным местоположением этого файла. Если файл политики безопасности размещается в корневой директории сайта, то доступ будет разрешен ко всему сайту. Например, файл политики безопасности, размещенный по адресу http:// www. example. com, разрешает доступ ко всему содержимому сайта www. example. com.

Когда файл политики безопасности размещается в поддиректории сайта, он разрешает доступ только к этой директории и к ее поддиректориям. Например, файл политики безопасности, размещенный по адресу http://www. example. com/assets, разрешает доступ ко всему содержимому директории /assets/ и ее поддиректорий, но не разрешает доступ ни к корневой директории сайта www. example. com, ни к любой другой поддиректории этого сайта.

С целью автоматизации процесса загрузки файлов политики безопасности язык ActionScript определяет используемое по умолчанию имя и местоположение для файлов политики безопасности. Любой файл политики безопасности с именем crossdomain. xml, размещенный в корневой директории сайта, считается

размещаемым в используемом по умолчанию местоположении файла политики безопасности и называется используемым по умолчанию файлом политики безопасности этого сайта. Как вы узнаете в следующих двух разделах, размещение файла политики безопасности в используемом по умолчанию местоположении файла политики безопасности сокращает объем кода, необходимого для получения разрешений из этого файла политики безопасности.

Получение разрешения на загрузку данных из файла политики безопасности

Когда на сайте размещается используемый по умолчанию файл политики безопасности, устанавливающий разрешение для определенного удаленного региона, SWF-файлы из этого региона могут загружать данные с сайта, просто выполняя желаемую операцию загрузки данных. Предположим, что на сайте site-a. com размещен следующий используемый по умолчанию файл политики безопасности, который разрешает доступ для источников site-b. com и www. site-b. com:




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>





Чтобы загрузить файл http://site-a. com/assets/file. xml, любой SWF-файл из источника www. site-b. com или site-b. com может использовать следующий код:

var url loader-.URLLoader = new URLLoader ( ):

url loader. load(new URLRequest(«http://si te-a. com/assets/file. xml»));

Поскольку файл политики безопасности сайта site-a. com размещается в используемом по умолчанию местоположении, приложение Flash Player находит его автоматически и разрешает загрузить файл file. xml.

Руководство по actionscript. часть 3, стр. 095

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

Securi ty.1oadPoli cyFi1e(«http://доменИли1Р/путьКФайлуПолитикиБезопасности»);

В приведенном обобщенном коде доменИли1Р — это домен или IP-адрес сайта, на котором размещается файл политики безопасности, а путьКФайлуПолитикиБезопас-ности — местоположение файла политики безопасности на этом сервере. Как уже упоминалось ранее, IP-адреса, заданные в числовом виде, и их эквивалентные доменные имена для приложения Flash Player считаются разными.

Предположим, что сайт site-c. com размещает следующий файл политики безопасности по адресу http://site-c. com/assets/policy. xml. Этот файл политики безопасности разрешает доступ для источников site-d. com и www. site-d. com.



SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>



Руководство по actionscript. часть 3, стр. 096

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

// Один раз загружаем файл политики безопасности

Security. loadPolicyFileChttp://si te-c. com/assets/pol icy. xml»);

// Выполняем две разрешенные операции загрузки

var urlloaderl:URLLoader = new URLLoader( );

urlloaderl. load(new URLRequest(«http://site-c. com/assets/filei. xml»)): var urlloader2:URLLoader = new URLLoader(» );

urlloader2.1oad(new URLRequest(«http://site-c. com/assets/file2.xml»)):

Рассмотрим практический пример, который демонстрирует, как файл политики безопасности, размещенный в поддиректории сайта, может быть использован в реальной ситуации. Предположим, Грейм поддерживает сайт с бесплатной информацией о котировках акций stock-feeds-galore. com. Он сохраняет самую последнюю полученную информацию в XML-файле, который размещается по следующему адресу:

stock-feeds-gal ore. com/1atest/feed. xml

Грейм хочет сделать так, чтобы содержимое директории /latest/ было доступно всем SWF-файлам из любого источника, но не хочет делать доступным весь сайт. Таким образом, Грейм размещает следующий файл политики безопасности с именем policy. xml в директории /latest/ (обратите внимание на использование подстановочного символа * в значении атрибута domain):




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>



После этого Грейм размещает на сайте stock-feeds-galore. com сообщение, которое информирует разработчиков на языке ActionScript о местоположении файла политики безопасности:

stock — feeds-gal ore. com/1atest/poli cy. xml

Тем временем Джеймс создает приложение stockticker. swf для отображения котировок акций, которое он собирается разместить на своем сайте www. some-news-site. com. Приложение Джеймса загружает последнюю информацию об акциях с сайта Грейма. Поскольку файл политики безопасности сайта www. stock-feeds-galore. com не находится в местоположении, используемом по умолчанию, Джеймс вынужден загрузить файл политики безопасности перед тем, как выполнить операцию загрузки информации об акциях. Вот код, который использует Джеймс для загрузки файла политики безопасности Грейма:

Securi ty.1oadPoli cyFi1e(«http://stock-feeds-gal ore. com/1atest/poli cy. xml»)

Инициировав запрос на загрузку файла политики безопасности, Джеймс использует объект URLLoader для загрузки файла feed. xml, как показано в следующем коде:

var urlLoader:URLLoader = new URLLoader( );

urlLoader. load(new URLRequest(«http://stock-feeds-galore. com/latest/feed. xml»)):

В результате выполнения предыдущего кода приложение Flash Player загружает файл http://stock-feeds-galore. com/latest/policy. xml, находит необходимое разрешение в этом файле политики безопасности и переходит к загрузке файла feed. xml.

Руководство по actionscript. часть 3, стр. 097

Теперь, когда мы познакомились с механизмом получения разрешения из файла политики безопасности на загрузку данных, рассмотрим механизм получения из файла политики безопасности разрешения на выполнение операции обращения к содержимому в виде данных.

Получение разрешения на доступ к содержимому в виде данных из файла политики безопасности

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

1. Если файл политики безопасности не находится в местоположении, используемом по умолчанию, загрузите его методом Security. loadPolicyFile ( ) (как описывалось в предыдущем разделе).

2. Создайте объект LoaderContext и присвойте значение true его переменной checkPolicyFile.

3. Загрузите нужное изображение с помощью метода Loader. load ( ); в качестве параметра context метода Loader. load ( ) передайте объект LoaderContext, созданный на шаге 2.

4. После загрузки изображения выполните операцию обращения к содержимому в виде данных.

Предположим, что сайт site-a. com размещает следующий файл политики безопасности по адресу http://site-a. com/assets/policy. xml. Файл разрешает доступ для источников site-b. com и www. site-b. com.




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>





Чтобы обратиться к файлу http://site-a. com/assets/image. jpg в виде данных, любой SWF-файл из источника www. site-b. com или site-b. com может использовать следующий код:

// Шаг 1: Файл политики безопасности не находится в местоположении, // используемом по умолчанию, поэтому загружаем его вручную.

Руководство по actionscript. часть 3, стр. 098

Security. loadPolicyFileChttp://si te-a. com/assets/pol icy. xml»):

// Шаг 2: Создаем объект LoaderContext и присваиваем его переменной // checkPolicyFile значение true,

var loaderContext = new LoaderContext( ); loaderContext. checkPolicyFile = true:

// Шаг 3: Загружаем изображение. Передаем объект LoaderContext в метод // Loader. load( ).

theLoader. load(new URLRequest(«http://site-a. com/assets/image. jpg»),

loaderContext):

// Шаг 4: Позднее, когда приложение убедится, что загрузка изображения // завершена, обращаемся к содержимому изображения в виде данных.

trace(theLoader. content):

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

1. Если файл политики безопасности не находится в местоположении, используемом по умолчанию, загрузите его методом Security. loadPolicyFile ( ) (как описывалось в предыдущем разделе).

2. Создайте объект SoundLoaderContext и присвойте значение true его переменной checkPolicyFile.

3. Загрузите желаемый звуковой файл с помощью метода экземпляра load ( ) класса Sound. В качестве параметра context метода load ( ) передайте объект SoundLoaderContext, созданный на шаге 2.

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

Предположим, что на сайте site-c. com размещен следующий используемый по умолчанию файл политики безопасности, который разрешает доступ для источников site-d. com и www. site-d. com.




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>





Чтобы обратиться к файлу http://site-c. com/sounds/song. mp3 в виде данных, любой SWF-файл из источника www. site-d. com или site-d. com может использовать следующий код:

// Шаг 1: Файл политики безопасности находится в местоположении,

// используемом по умолчанию, поэтому загружать его вручную не нужно

// Шаг 2: Создаем объект SoundLoaderContext и присваиваем его переменной // checkPolicyFile значение true,

var SoundLoaderContext = new SoundLoaderContext( ): SoundLoaderContext. checkPolicyFile = true:

// Шаг 3: Загружаем звуковой файл. Передаем объект SoundLoaderContext // в метод Loader. load( ).

Руководство по actionscript. часть 3, стр. 099

TheSound.1oad(new URLRequest(«http://example. com/sounds/song. mp3″):

// Шаг 4: Позднее, когда приложение убедится, что загрузка метаданных // в формате ID3 звукового файла завершена (это можно определить

// по событию Event. ID3), обращаемся к содержимому звукового файла

// в виде данных.

trace(theSound. id3):

Следует отметить, что присваивание значения true переменной экземпляра checkPolicyFile классов LoaderContext или SoundLoaderContext не влияет на загрузку элемента. При выполнении метода load ( ) классов Loader или SoundLoader элемент загружается всегда, даже если файл политики безопасности не разрешает доступ для региона происхождения данного SWF-файла. Тем не менее, если код в этом SWF-файле попытается обратиться к загруженному элементу в виде данных, приложение Flash Player сгенерирует исключение SecurityError.

Рассмотрим реальный пример, который демонстрирует, как используемый по умолчанию файл политики безопасности сайта может быть применен для разрешения операции обращения к содержимому в виде данных.

Помните сайт Грейма stock-feeds-galore. com? Сайт работает так хорошо, что у Грейма появляется свободное время. Он решает поэкспериментировать с программированием растровой графики на языке ActionScript и создает приложение для распознавания лиц, которое может автоматически добавлять забавную шляпу для вечеринок на любую фотографию лица человека. Грейм очень доволен собой.

Друг Грейма Энди управляет компанией, организующей лотереи, у которой есть рекламный сайт www. lotterylotterylottery. com. Энди увидел приложение Грейма и решил, что оно позволит провести хорошую рекламную кампанию. Кампания заключается в том, что победители лотерей размещают свои фотографии на сайте photos. lotterylotterylottery. com. После этого основной сайт www. lotterylotterylottery. com выбирает случайную фотографию для домашней страницы, отображая победителя лотереи в шляпе для вечеринок. Энди нанимает Грейма, чтобы реализовать программный код для этой кампании.

Грейм размещает свое приложение для распознавания лиц partyhat. swf на сайте www. lotterylotterylottery. com. После этого он пишет сценарий на языке Perl randompic. pi, который возвращает случайную фотографию (JPG-файл) с сайта photos. lotterylotterylottery. com. Он размещает сценарий randompic. pi в директории photos. lotterylotterylottery. com/cgi-bin.

Файлу partyhat. swf с сайта www. lotterylotterylottery. com требуется доступ к пикселам фотографий, загруженных с сайта photos. lotterylotterylottery. com. Чтобы разрешить этот доступ, Грейм размещает следующий файл политики безопасности в корневой директории сайта phbtos. lotterylotterylottery. com и присваивает ему имя

crossdomain. xml:




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>





Обратите внимание, что Грейм добавил оба источника — www. lotterylotterylottery. com и lotterylotterylottery. com — в файл политики безопасности. Таким образом, приложение partyhat. swf будет функционировать правильно независимо от того, с какого из указанных URL-адресов оно будет загружено. Грейм также не позабыл исключить домен «*», поскольку его политика безопасности применяется только к конкретным доменам, а не ко всему миру.

Руководство по actionscript. часть 3, стр. 100

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

var loaderContext = new LoaderContext( ): loaderContext. checkPolicyFile = true: loader. load(

new URLRequest(«http://photos.1otterylotterylottery. com/randompiс. pi»). loaderContext):

В результате выполнения приведенного кода приложение Flash Player загружает файл http://photosJotterylotterylottery. com/crossdomain. xml, находит в нем требуемое разрешение, загружает фотографию, возвращаемую сценарием randomi с. pi, и после этого разрешает приложению partyhat. swf обратиться к пикселам загруженной фотографии.

После загрузки фотографии приложение partyhat. swf благополучно обращается к ее данным. Например, вот код, используемый Греймом для вызова метода приложения pa г t yha t. s wf, который добавляет шляпу для вечеринок к загруженной фотографии (стоит отметить, что для обращения к объекту Bitmap загруженного изображения loader. content требуется разрешение):

addHat(1oader. content):

Теперь, когда мы познакомились с механизмами использования файлов политики безопасности для разрешения операций загрузки данных и обращения к содержимому в виде данных, рассмотрим, как можно использовать файлы политики безопасности для разрешения сокетных соединений.

Использование файла политики безопасности для разрешения сокетных соединений

Чтобы разрешить сокетные соединения с помощью файла политики безопасности, используйте следующую общую последовательность действий.

1. Создайте файл политики безопасности.

2. Сделайте так, чтобы этот файл был доступен через сокетный сервер или HTTP-сервер, запущенный в том же домене или для того же IP-адреса, с которым планируется установить сокетное соединение.

Описанные шаги подробно рассматриваются в следующих трех разделах.

Создание файла политики безопасности

Файлы политики безопасности, разрешающие установку сокетных соединений, в основном имеют такой же синтаксис, как и файлы политики безопасности, разрешающие выполнение операций загрузки данных и обращения к содержимому в виде данных. Однако в файлах первого типа тег содержит дополнительный атрибут to-ports, как показано в следующем коде:




SYSTEM «http://www. adobe. com/xml/dtds/cross-domain-policy. dtd»>



Атрибут to-ports определяет порты, к которым может подключаться SWF-файл из источника доменИли1Р. Порты можно задавать по отдельности (разделяя значения запятыми) или диапазонами (разделяя значения символом -). Например, приведенный далее файл политики безопасности устанавливает следующие разрешения:

? SWF-файлы из источника examplel. com могут подключаться к портам 9100 и 9200;

? SWF-файлы из источника example2.com могут подключаться к портам в диапазоне от 10 000 до И 000.

Руководство по actionscript. часть 3, стр. 101









В значении атрибута to-ports символ * является подстановочным символом. Когда файл политики безопасности загружается через сокет на порте меньшем чем 1024, символ * означает, что доступ разрешен к любому порту. Когда файл политики безопасности загружается через сокет на порте, большем или равном 1024, символ * означает, что можно обращаться к любому порту, большему или равному 1024.

I Поскольку порты ниже 1024 считаются привилегированными, файл политики безопас-А т ности, получаемый через порт 1024 или выше, не сможет разрешить доступ к портам ц»У ниже 1024, даже если они будут указаны явно.

Например, если получение следующего файла политики безопасности осуществляется через порт 2000, SWF-файлам с сайта example3.com будет дано разрешение на подключение ко всем портам выше или равным 1024.


SYSTEM «http://www. adobe. com/xml /dtds/сross-domai n-poli cy. dtd»>



Но если получение того же файла политики безопасности осуществляется через порт 1021 (который меньше чем 1024), то SWF-файлам с сайта example3.com будет дано разрешение на подключение к любому порту.

Таким образом, чтобы SWF-файлы из любого местоположения могли подключаться к любому порту, получение следующего файла политики безопасности должно осуществляться через порт ниже 1024:


SYSTEM «http://www,.adobe. com/xml/dtds/cross-domain-pol icy. dtd»>



Когда получение файла политики безопасности осуществляется через сокет, атрибут to-ports является обязательным. Если этот атрибут не указан, то доступ будет запрещен ко всем портам.

Руководство по actionscript. часть 3, стр. 102

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

Получение файла политики безопасности через сокет

Файлы политики безопасности, разрешающие сокетные соединения, могут передаваться либо непосредственно через сокет, либо по протоколу HTTP. Файлы политики безопасности, передаваемые через сокет, должны размещаться в том же домене или на том же IP-адресе, с которым планируется устанавливать соединение. При этом можно использовать либо порт, с которым устанавливается соединение, либо другой порт. В любом случае сервер, обслуживающий порт, через который передается файл политики безопасности, должен общаться с приложением Flash Player с помощью очень простого протокола получения файла политики безопасности. Протокол состоит из одного тега , который отправляется приложением Flash Player через сокет, когда оно желает загрузить файл политики безопасности, разрешающий сокетное соединение. В ответ сокетный сервер должен отправить приложению Flash Player текст файла политики безопасности в формате ASCII вместе с нулевым байтом (то есть пустым символом таблицы ASCII) и после этого закрыть соединение.

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

Предположим, что многопользовательский игровой сервер, размещенный на сайте site-a. com, обрабатывает игровые запросы и запросы на получение файла политики безопасности на порте 3000. Файл политики безопасности этого сервера разрешает доступ для источников www. site-b. com и site-b. com, как показано в следующем коде:




SYSTEM «http://www. adobe. com/xiTil/dtds/cross-doiTiain-policy. dtd»>





Чтобы подключиться к порту 3000 сайта site-a. com, любой SWF-файл, загруженный из источника www. site-b. com или site-b. com, может использовать следующий код:

var socket:Socket = new Socket( ): try { .

socket. connect(«site-a. com». 3000): } catch (e:SecurityError) { trace(«Connection problem!»): trace(e. message):

}

При выполнении предыдущего кода перед тем, как будет разрешено требуемое подключение к порту 3000, приложение Flash Player автоматически создает отдельное

подключение к порту 3000 и отправляет сообщение игровому серверу. Игровой сервер отправляет в ответ файл политики безопасности сайта site-a. com и после этого закрывает соединение. В списке разрешенных регионов данного файла политики безопасности содержится источник SWF-файла, пытающегося установить соединение, что позволяет разрешить исходное сокетное соединение. Вообще, создается два различных подключения: одно для получения файла политики безопасности и затем еще одно для выполнения исходного запроса на установление сокетного соединения.



Полезные ссылки
Случайные записи
  • 04.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.20
  • 24.02.2011">Руководство по actionscript. часть 6, стр. 111
  • 09.03.2011">Руководство по actionscript. часть 4, стр. 047
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.77
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 030
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 151
  • 21.03.2011">Руководство по actionscript. часть 2, стр. 045
  • 20.06.2011">Пластиковые или деревянные окна?
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 120
  • 21.03.2011">Руководство по actionscript. часть 2, стр. 051
  • 16.07.2010">Простые способы улучшить сайт
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 103
  • 27.08.2011">Коротаем вечер.
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.115
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.140
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...