Безопасная работа с недоверенным содержимым

Adobe AIR 1.0 и более новых версий

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

Security.allowDomain()

Приложения AIR накладывают более строгие ограничения на выполнение сценариев содержимым не из изолированной среды приложения, чем ограничения, накладываемые подключаемым модулем обозревателя проигрывателя Flash Player на выполнение сценариев с ненадежным содержимым. Например, для проигрывателя Adobe Flash в обозревателе, если SWF-файл, назначенный изолированной программной среде local-trusted, вызывает метод System.allowDomain(), доступ к сценариям разрешается для всех SWF, загруженных из указанного домена. Аналогичный подход не реализуется для содержимого application в приложениях AIR, так как он предполагает предоставление файлу, не имеющему отношения к приложению, слишком широкого доступа к файловой системе пользователя. Удаленные файлы не могут получить прямой доступ к изолированной программной среде приложения, независимо от вызова метода Security.allowDomain().

Выполнение сценариев между содержимым приложения и другим содержимым

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

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

Подобную функциональность может обеспечить мост изолированной программной среды. По умолчанию содержимое, загруженное в приложение AIR во время выполнения извне, не имеет доступа к методам и свойствам главного приложения. В случае с пользовательской реализацией моста изолированной программной среды разработчик может предоставить удаленному содержимому доступ к службам, предоставив доступ к этим методам и свойствам. Мост изолированной программной среды можно считать мостом между доверенным и недоверенным содержимым, обеспечивающим взаимодействие между содержимым загрузчика и загружаемым содержимым без предоставления доступа к ссылкам на объекты.

Дополнительные сведения о безопасном использовании моста изолированной программной среды см. в разделе «Выполнение сценариев между содержимым из различных доменов».

Защита от динамически генерируемого небезопасного содержимого SWF

Метод Loader.loadBytes() позволяет приложению генерировать содержимое SWF из байтового массива. Однако атаки на данные, загруженные из удаленных источников, могут причинить серьезный вред при загрузке содержимого. Особенно это относится к загрузке данных в изолированную программную среду приложения, в которой сгенерированное содержимое SWF может получить доступ к полному набору API-интерфейсов AIR.

Возможно допустимое использование метода loadBytes() без создания исполняемого кода SWF. Например, метод loadBytes() можно использовать для формирования данных изображения в целях управления временем вывода изображения. Допустимо также применение этого метода на основе исполняемого кода, например динамическое создание содержимого SWF для воспроизведения аудиоданных. По умолчанию метод loadBytes() в AIR не позволяет загружать содержимое SWF; он позволяет загружать только изображения. В AIR свойство loaderContext метода loadBytes() имеет свойство allowLoadBytesCodeExecution, которое можно установить на значение true, чтобы явно разрешить приложению использовать метод loadBytes() для загрузки исполняемого содержимого SWF. Следующий код иллюстрирует использование этой функции:

var loader:Loader = new Loader(); 
var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.allowLoadBytesCodeExecution = true; 
loader.loadBytes(bytes, loaderContext);

Если при вызове метода loadBytes() для загрузки содержимого SWF свойство allowLoadBytesCodeExecution объекта LoaderContext имеет значение false (по умолчанию), объект Loader выдает исключение SecurityError.

Примечание. В будущем выпуске Adobe AIR данный API-интерфейс может измениться. В таком случае может потребоваться повторная компиляция содержимого, использующего свойство allowLoadBytesCodeExecution класса LoaderContext.