Элементы управления разрешениями

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

Модель безопасности клиента Flash Player во время выполнения построена вокруг ресурсов, которые являются объектами, такими как SWF-файлы, локальные данные и URL-адреса в Интернете. Заинтересованные лица — это стороны, которые являются владельцами или пользователями этих ресурсов. Заинтересованные лица могут использовать элементы управления (параметры безопасности) для ограничения доступа к своим ресурсам. Для каждого ресурса назначается четыре заинтересованных лица. Проигрыватель Flash Player строго соблюдает иерархию полномочий для этих элементов управления, приведенную в следующей схеме.

Иерархия полномочий
Иерархия элементов управления безопасностью

Это означает, к примеру, что если администратор запрещает доступ к ресурсу, это ограничение не могут переопределить другие заинтересованные лица.

Для приложений AIR эти элементы управления доступом применяются только к содержимому, выполняемому за пределами изолированной программной среды приложения AIR.

Элементы управления администратора

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

Существует два типа элементов управления администратора:

  • файл mms.cfg

  • каталог Global Flash Player Trust

файл mms.cfg

Файл mms.cfg — это текстовый файл, с помощью которого администраторы могут разрешать или запрещать доступ к разным функциям. При запуске проигрыватель Flash Player считывает параметры безопасности из этого файла и использует их для ограничения доступа к функциям. Файл mms.cfg включает параметры, с помощью которых администратор управляет возможностями, такими как элементы управления конфиденциальностью, безопасность локальных файлов, подключения к сокетам и прочее.

SWF-файл может получать некоторые сведения об отключенных возможностях с помощью свойств Capabilities.avHardwareDisable и Capabilities.localFileReadDisable . Однако большинство параметров, содержащихся в файле mms.cfg, нельзя получить с помощью ActionScript.

Чтобы на компьютере можно было применять политики безопасности и конфиденциальности, независимые от приложения, доступ для изменения файла mms.cfg должны иметь только системные администраторы. Файл mms.cfg не предназначен для использования программами установки. Программа установки, запущенная с использованием полномочий администратора, может изменить содержимое файла mms.cfg. Компания Adobe считает, что это может подорвать доверие пользователей, и призывает создателей программ установки никогда не изменять файл mms.cfg.

Файл mms.cfg хранится в следующем местоположении:

  • Windows: система \Macromed\Flash\mms.cfg

    (например, C:\WINDOWS\system32\Macromed\Flash\mms.cfg)

  • Mac: поддержка приложений /Macromedia/mms.cfg

    (например, /Library/Application Support/Macromedia/mms.cfg)

Дополнительные сведения о файле mms.cfg см. в руководстве администратора Flash Player Administration Guide по адресу www.adobe.com/go/flash_player_admin_ru .

каталог Global Flash Player Trust

Администраторы и программы установки могут регистрировать заданные локальные SWF-файлы в качестве доверенных для всех пользователей. Такие SWF-файлы распределяются в локальную доверенную изолированную программную среду. Они могут взаимодействовать со всеми остальными SWF-файлами и загружать данные из любых местоположений, удаленных и локальных. Файлы указываются как доверенные в каталоге Global Flash Player Trust, который находится в следующем местоположении:

  • Windows: система \Macromed\Flash\FlashPlayerTrust

    (например, C:\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust)

  • Mac: поддержка приложений /Macromedia/FlashPlayerTrust

    (например, /Library/Application Support/Macromedia/FlashPlayerTrust)

Каталог FlashPlayerTrust может содержать несколько текстовых файлов, в каждом из которых перечислены доверенные пути, по одному в строке. Каждый путь может представлять отдельный SWF-файл, HTML-файл или каталог. Строки комментариев начинаются с символа # . Например, файл конфигурации доверия проигрывателя Flash Player, содержащий следующий текст, делает доверенными все файлы в указанном каталоге и во всех его подкаталогах.

# Trust files in the following directories: 
C:\Documents and Settings\All Users\Documents\SampleApp

В файле конфигурации доверия должны перечисляться только локальные пути или сетевые пути SMB. НТТР-пути, добавленные в файл конфигурации доверия, игнорируются. Доверенными могут быть только локальные файлы.

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

Распространяя локально выполняемый SWF-файл через программу установки, разработчик может предписать программе установки добавить файл конфигурации в каталог Global Flash Player Trust, чтобы предоставить полные привилегии распространяемому файлу. Программу установки должен запустить пользователь с правами администратора. В отличие от файла mms.cfg, каталог Global Flash Player Trust предусмотрен для того, чтобы регистрировать доверенные файлы с помощью программ установки. С помощью каталога Global Flash Player Trust регистрировать доверенные локальные приложения могут как администраторы, так и программы установки.

Также существуют каталоги Flash Player Trust для отдельных пользователей (см. раздел Элементы управления пользователя ).

Элементы управления пользователя

В проигрывателе Flash Player предусмотрено три разных механизма для управления доступом на уровне пользователя: пользовательский интерфейс «Параметры», диспетчер параметров и каталог User Flash Player Trust.

Пользовательский интерфейс «Параметры» и диспетчер параметров

Пользовательский интерфейс «Параметры» является быстрым интерактивным механизмом для настройки параметров определенного домена. Менеджер параметров имеет более детальный интерфейс и предоставляет возможность вносить глобальные изменения, затрагивающие разрешения для многих или всех доменов. Кроме того, когда SWF-файл запрашивает новое разрешение, что требует принятия решений о безопасности и конфиденциальности во время выполнения, открывается диалоговое окно, в котором пользователь может изменить некоторые параметры проигрывателя Flash Player.

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

Примечание. Параметры, настроенные в файле mms.cfg (см. раздел « Элементы управления администратора »), не отражаются в диспетчере параметров.

Дополнительные сведения о диспетчере параметров см. на странице www.adobe.com/go/settingsmanager_ru .

Каталог User Flash Player Trust

Пользователи и программы установки могут регистрировать в качестве доверенных определенные локальные SWF-файлы. Такие SWF-файлы распределяются в локальную доверенную изолированную программную среду. Они могут взаимодействовать со всеми остальными SWF-файлами и загружать данные из любых местоположений, удаленных и локальных. Пользователь указывает файл как доверенный в каталоге User Player Trust, который находится в том же каталоге, что и папка хранения общих объектов Flash (местоположение варьируется в зависимости от текущего пользователя):

  • Windows: данные приложений\Macromedia\Flash Player\#Security\FlashPlayerTrust

    (например, C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust в Windows XP или C:\Users\JohnD\AppData\Roaming\Macromedia\Flash Player\#Security\FlashPlayerTrust в Windows Vista)

    В Windows папка Application Data скрыта по умолчанию. Чтобы показать скрытые папки и файлы, выберите «Мой компьютер», откройте проводник и выберите «Сервис» > «Свойства папки», затем перейдите на вкладку «Вид». На вкладке «Вид» выберите переключатель «Показывать скрытые файлы и папки».

  • Mac: данные приложений/Macromedia/Flash Player/#Security/FlashPlayerTrust

    (например, /Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)

    Эти параметры действуют только для текущего пользователя, а не для всех, кто работает с этим компьютером. Если пользователь без прав администратора устанавливает приложение в свою части системы, каталог User Flash Player Trust позволяет программе установки зарегистрировать приложение как доверенное для этого пользователя.

    Распространяя локально выполняемый SWF-файл через программу установки, разработчик может предписать программе установки добавить файл конфигурации в каталог User Flash Player Trust, чтобы предоставить полные привилегии распространяемому файлу. Даже в такой ситуации файл каталога User Flash Player Trust контролируется пользователем, потому что он создается в результате действия пользователя (установки).

    Также существует каталог Global Flash Player Trust, который используется администраторами и программами установки для регистрации приложений для всех пользователей компьютера (см. раздел « Элементы управления администратора »).

Элементы управления веб-сайта (файлы политики)

Чтобы данные с веб-сервера были доступны SWF-файлам из других доменов, на сервере можно создать файл политики. Файл политики — это XML-файл, помещенный в специальное местоположение на сервере.

Файлы политики определяют доступ к ряду ресурсов, включая следующее:

  • получение данных растровых изображений, аудио и видео;

  • загрузку XML и текстовых файлов;

  • импорт SWF-файлов из других изолированных программных сред в домен безопасности загружающего файла;

  • доступ к подключениям к сокетам и XML-сокетам.

Объекты ActionScript создают подключения к серверу двух типов: подключения к серверу на основе документов и подключения к сокетам. Такие объекты ActionScript, как Loader, Sound, URLLoader и URLStream, создают подключения к серверу на основе документов и загружают файл с URL-адреса. Объекты Socket и XMLSocket создают подключения к сокетам, которые работают с потоковой передачей данных, а не с загруженными документами.

Так как проигрыватель Flash Player поддерживает два типа подключений к серверу, существует и два типа файлов политики: файлы политики URL-адресов и файлы политики сокетов.
  • Для подключений на основе документов требуются файлы политики URL-адресов . С помощью этих файлов сервер указывает, что его данные и документы доступны для SWF-файлов, размещенных на определенных доменах или на любых доменах.

  • Для подключений к сокетам требуются файлы политики сокетов , которые обеспечивают прямое сетевое подключение к TCP-сокетам нижнего уровня с помощью классов Socket и XMLSocket.

Файлы политики должны передаваться проигрывателю Flash Player с использованием того же протокола, который собирается использовать устанавливаемое подключение. Например, когда файл политики помещается на HTTP-сервер, SWF-файлы с других доменов могут загружать данные с этого сервера с использованием протокола HTTP. Однако, если на этот же сервер не добавить файл политики сокетов, то SWF-файлы из других доменов не смогут подключиться к серверу через сокеты. Другими словами, способ получения файла политики должен соответствовать способу подключения.

Далее в этом разделе приводится краткое описание использования файлов политики и синтаксиса применительно к SWF-файлам, опубликованным для проигрывателя Flash Player 10. (Для более ранних версий Flash Player файлы политики реализуются несколько иначе, так как по мере выхода новых версий улучшалась система безопасности проигрывателя Flash Player.) Дополнительные сведения о файлах политики см. в разделе «Изменения в файлах политики в Flash Player 9» центра разработчиков Flash Player Developer Center по адресу www.adobe.com/go/devnet_security_ru .

Коду, выполняемому в изолированной программной среде приложения AIR, не требуется файл политики для доступа к данным через URL или сокет. Коду в приложении AIR, выполняемому за пределами изолированной программной среды приложения, требуется файл политики.

Основные файлы политики

По умолчанию проигрыватель Flash Player (и содержимое AIR, находящееся за пределами изолированной программной среды приложения AIR) сначала ищет файл политики URL с именем crossdomain.xml в корневом каталоге сервера, а файл политики сокетов у порта 843. Файлы в этих местоположениях называются основными файлами политики . (При подключении к сокетам проигрыватель Flash Player также ищет файл политики сокетов у того же порта, через который устанавливается основное подключение. Однако файл, найденный в этом местоположении, не рассматривается как основной.)

Помимо определения прав доступа, основной файл политики также содержит метаполитику . Она указывает, в каких местоположениях могут находиться файлы политики. По умолчанию метаполитика файлов политики для URL имеет значение «master-only» (только основной), то есть файл /crossdomain.xml является единственным допустимым файлом политики на сервере. Для файлов политики сокетов метаполитика по умолчанию имеет значение «all» (все), то есть файл политики может быть у любого порта.

Примечание. В проигрывателе Flash Player 9 и более ранних версиях метаполитика по умолчанию для файлов политики URL-адресов имела значение «all» (все), то есть файл политики может находиться в любом каталоге. Если вы развернули приложения, которые загружают файлы политики не из файла по умолчанию (/crossdomain.xml) и в данный момент они могут выполняться в проигрывателе Flash Player 10, не забудьте изменить метаполитику основного файла политики, чтобы разрешить использование дополнительных файлов политики, или попросите об этом администратора сервера. Сведения о том, как изменить метаполитику, см. в разделе «Изменения в файлах политики в Flash Player 9» центра разработчиков Flash Player Developer Center по адресу www.adobe.com/go/devnet_security_ru .

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

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

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

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

В следующих разделах содержатся сведения, которые относятся только к файлам политики URL-адресов. Дополнительные сведения о файлах политики сокетов см. в разделе « Подключение к сокетам ».

Область действия файла политики URL-адресов

Файл политики URL-адресов применяется только к каталогу, из которого он загружен, и к его дочерним каталогам. Файл политики в корневом каталоге применяется ко всему серверу. Файл политики, загруженный из подкаталога, применяется только к этому каталогу и его подкаталогам.

Файл политики определяет доступ только к тому серверу, где он находится. Например, файл политики, находящийся по адресу https://www.adobe.com:8080/crossdomain.xml, применяется только к вызовам на загрузку данных с сервера www.adobe.com по протоколу HTTPS через порт 8080.

Указание прав доступа в файле политики URL-адресов

Файл политики содержит один тег <cross-domain-policy> , в котором, в свою очередь, может быть любое количество тегов <allow-access-from> , начиная с нуля. Каждый тег <allow-access-from> содержит атрибут domain , который указывает либо точный IP-адрес, либо точное имя домена, либо подстановочный домен (любой домен). Подстановочные домены можно указать двумя способами:
  • одной звездочкой, что соответствует всем доменам и всем IP-адресам;

  • звездочкой с суффиксом, что соответствует только доменам с указанным суффиксом.

Суффикс должен начинаться с точки. Однако подстановочные домены с суффиксами могут соответствовать доменам, которые содержат только суффиксы без начальной точки. Например, «xyz.com» рассматривается как часть «*.xyz.com». Подстановочные знаки нельзя использовать в IP-адресах.

В следующем примере показан файл политики URL-адресов, который разрешает доступ SWF-файлам из доменов *.example.com, www.friendOfExample.com и 192.0.34.166.

<?xml version="1.0"?> 
<cross-domain-policy> 
    <allow-access-from domain="*.example.com" /> 
    <allow-access-from domain="www.friendOfExample.com" /> 
    <allow-access-from domain="192.0.34.166" /> 
</cross-domain-policy>

Если указывается IP-адрес, доступ предоставляется только SWF-файлам, загруженным с этого IP-адреса с использованием IP-синтаксиса (например, http://65.57.83.12/flashmovie.swf). При предоставлении доступа SWF-файлам не используется синтаксис доменных имен. Проигрыватель Flash Player не выполняет разрешение DNS.

Можно разрешить доступ документам из любого домена, как показано в следующем примере.

<?xml version="1.0"?> 
<!-- http://www.foo.com/crossdomain.xml --> 
<cross-domain-policy> 
<allow-access-from domain="*" /> 
</cross-domain-policy>

Каждый тег <allow-access-from> также имеет дополнительный атрибут secure , который по умолчанию имеет значение true . Если файл политики находится на HTTPS-сервере и нужно разрешить SWF-файлам с сервера другого типа (не HTTPS) загружать данные с HTTPS-сервера, этому атрибуту можно задать значение false .

Присвоение атрибуту secure значения false может ослабить защиту, обеспечиваемую протоколом HTTPS. В частности, значение false открывает защищенное содержимое для несанкционированного доступа или спуфинга. Компания Adobe настоятельно рекомендует не задавать атрибуту secure значение false .

Если загружаемые данные находятся на HTTPS-сервере, а загружающий их SWF-файл — на HTTP-сервере, компания Adobe рекомендует переместить загружающий SWF-файл на HTTPS-сервер. Благодаря этому все копии конфиденциальных данных будут находиться под защитой HTTPS. Однако, если вы решите оставить загружающий SWF-файл на НТТР-сервере, добавьте атрибут secure="false" в тег <allow-access-from> , как показано ниже.

<allow-access-from domain="www.example.com" secure="false" /> 
Также для предоставления доступа можно использовать тег allow-http-request-headers-from . Этот элемент предоставляет клиенту, размещающему содержимое с другого домена, разрешение отправлять вашему домену заголовки, определенные пользователем. Тег <allow-access-from> предоставляет другим доменам доступ для получения данных с вашего домена, а тег allow-http-request-headers-from предоставляет другим доменам разрешение на отправку данных вашему домену в виде заголовков. В следующем примере всем доменам разрешается отправлять заголовок SOAPAction текущему домену.
<cross-domain-policy> 
    <allow-http-request-headers-from domain="*" headers="SOAPAction"/> 
</cross-domain-policy>

Если тег allow-http-request-headers-from добавляется в основной файл политики, он применяется ко всем каталогам хоста. В противном случае он применяется только к каталогу и подкаталогам, на которые распространяется файл политики, содержащий тег.

Предварительная загрузка файлов политики

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

  • Если используется метод Loader.load() , задайте свойство checkPolicyFile параметра context , который является объектом LoaderContext.

  • Если изображение встраивается в текстовое поле с помощью тега <img> , задайте атрибуту checkPolicyFile тега <img> значение "true" , как показано ниже.

    <img checkPolicyFile = "true" src = "example.jpg">
  • Если используется метод Sound.load() , задайте свойство checkPolicyFile параметра context , который является объектом SoundLoaderContext.

  • Если используется NetStream, задайте свойство checkPolicyFile объекта NetStream.

Если задан один из этих параметров, проигрыватель Flash Player сначала проверяет файлы политики, уже загруженные для этого домена. Затем он ищет файл политики сервера в местоположении по умолчанию, проверяя теги <allow-access-from> и наличие метаполитики. В завершение, рассматриваются все вызовы метода Security.loadPolicyFile() , ожидающие обработки, чтобы оценить их область действия.

Элементы управления автора (разработчика)

В качестве основного API-интерфейса ActionScript для предоставления прав доступа используется метод Security.allowDomain() , который предоставляет права SWF-файлам в указанных доменах. В следующем примере SWF-файл предоставляет доступ SWF-файлам из домена www.example.com.

Security.allowDomain("www.example.com")

Этот метод предоставляет права для:

Основная цель вызова метода Security.allowDomain() состоит в предоставлении разрешения SWF-файлам во внешнем домене выполнять сценарии для SWF-файла, вызывающего метод Security.allowDomain() . Дополнительные сведения см. в разделе « Перекрестное выполнение сценариев ».

Указав IP-адрес в качестве параметра метода Security.allowDomain() , нельзя разрешить доступ всем сторонам с этого IP-адреса. В результате этого доступ получит только та сторона, у которой в состав URL входит указанный IP-адрес, а не соответствующее ему доменное имя. Например, если доменное имя www.example.com соответствует IP-адресу 192.0.34.166, вызов метода Security.allowDomain("192.0.34.166") не предоставит доступ домену www.example.com.

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

В языке ActionScript предусмотрен еще один API-интерфейс предоставления доступа: метод Security.allowInsecureDomain() . Этот метод работает так же, как Security.allowDomain() , но когда он вызывается из SWF-файла, находящегося на HTTPS-сервере, он также разрешает доступ к нему для других SWF-файлов, использующих незащищенный протокол, такой как НТТР. Тем не менее, не рекомендуется разрешать выполнение сценариев между файлами, использующими защищенный протокол (HTTPS), и файлами, использующими незащищенный протокол (например, HTTP), так как это может сделать защищенное содержимое уязвимым для несанкционированного доступа и спуфинга. Вот как происходит подобная атака: поскольку метод Security.allowInsecureDomain() разрешает доступ к данным, защищенным с помощью протокола HTTPS, для SWF-файлов, использующих протокол HTTP, злоумышленник, находящийся между HTTP-сервером и пользователями, может заменить незащищенный SWF-файл на другой, который сможет открыть ему доступ к данным на HTTPS-сервере.

Важная информация. Коду, выполняемому в изолированной программной среде приложения AIR, запрещено вызывать методы allowDomain() и allowInsecureDomain() класса Security.

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