Flash: могу ли я запретить доступ ExternalInterface к загруженному SWF? - PullRequest
5 голосов
/ 05 марта 2012

У нас есть приложение Flash (AS3).Это настольное приложение, которое работает на нашем собственном проекторе.Нет воздуха.Проектор написан на C ++.Проектор предоставляет Flash-части косвенный доступ к Windows API через ExternalInterface.

Теперь мы хотим позволить нашему сообществу создавать плагины.Просто чтобы они могли сделать маленькую анимированную картинку с небольшим количеством Action Script 3.

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

Но у нас есть проблемы с безопасностью.Что, если какой-нибудь плохой человек воспользуется косвенным доступом к Win API?

Я провел небольшой тест.Загруженный в программу дочерний файл .swf пытается вызвать методы ExternalInterface.Оказалось, что child.swf смог это сделать.Таким образом, каждый загруженный в нашу программу файл .swf автоматически получает доступ к Win API.

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

Можем ли мы запретить доступ ExternalInterface кзагруженный .swf?Если нет - как бы вы внедрили систему плагинов в AS3 с учетом безопасности?

Буду признателен за любые советы, которые могут помочь.

Ответы [ 3 ]

1 голос
/ 11 марта 2012

Ну, я не знаю никаких явных методов в AS3.Но вот что я предлагаю:

  • Перед тем, как получить доступ к WinAPI, необходимо выполнить обратный вызов основного SWF-файла для авторизации запроса.

  • Если запрос сделан основным SWF, то авторизация должна быть успешной.

  • Если дочерний SWF делает запрос, основной SWf должен отклонить запрос.


EDIT

Дочерний swf может не переопределить основной вызов swf.Если это так, вы можете перевести его обратно с основного.Кроме того, это не externalInterface для дочернего объекта, а основной swf.

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

0 голосов
/ 15 марта 2012

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

Тогда это было бы так же просто, как запросить основную программу, вызвал ли она вызов externalInterface.

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

Конечно, любое такое решение АБСОЛЮТНО ТРЕБУЕТ, чтобы ваш проектор C ++ и SWF были КРАЙНЕ хорошо скрыты.

0 голосов
/ 15 марта 2012

Вам нужно создать новый процесс для вашего SWF-файла, чтобы реализовать собственную песочницу . Я думаю, что было бы лучше, если бы вы запустили настоящий компонент air (новый exe-файл), который будет обрабатывать этот swf

...