Разрешить Flash-фильму общаться с содержащим окном, не раскрывая весь ExternalInterface? - PullRequest
0 голосов
/ 14 октября 2011

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

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

Теперь я могу придумать два способа сделать это:

  • Использовать ExternalInterface.addCallback для создания глобального обратного вызова с именем, подобным isComplete это делает логику и возвращает истину или ложь в зависимости от того, находится ли приложение Flash в завершенном состоянии.Затем просто сделайте что-то вроде setTimeout, чтобы просто вызвать эту функцию несколько раз.Я не думаю, что это потребовало бы от меня открыть allowscriptaccess для фильма.
  • Вставить фильм с помощью allowscriptaccess и заставить фильм вызывать что-то вроде ExternalInterface.call('done'), когда он закончится.Похоже, эта опция требует от меня открытия allowscriptaccess, который представляет потенциальную угрозу, поскольку я не могу контролировать SWF-файлы, которые будут встроены в эту директиву.

Есть ли решение, которое я 'Мне не хватает бесконечного цикла и не требует, чтобы я открыл угрозу безопасности?

1 Ответ

1 голос
/ 14 октября 2011

Вместо того, чтобы встраивать ваши SWF-файлы непосредственно в главную страницу, вставьте их на отдельную страницу, которая размещена на поддомене (или каком-либо другом домене).Затем отобразите эту подстраницу с помощью <iframe> на главной странице.Таким образом, вы получите кросс-домен <iframe>.Идем дальше и даем SWF allowscriptaccess разрешения.Затем свяжитесь с помощью iframe через postMessage (или скрипт кросс-браузерного моделирования).Таким образом, SWF-файл может делать с страницей все что угодно, но есть только один контролируемый «туннель» для главной страницы.

...