Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка безопасности при загрузке из вторичной swf (http://www.flasher.ru/forum/showthread.php?t=175760)

GBee 29.02.2012 18:13

bоnfire.swf должен Security.allowDomain, чтобы загружающие его флэшки, могли его трогать внутри. Видимо бонфаер не так прост.

s3dworld 29.02.2012 18:20

GBee
Цитата:

bоnfire.swf должен Security.allowDomain, чтобы загружающие его флэшки, могли его трогать внутри. Видимо бонфаер не так прост.
Вообще bоnfire.swf это дело рук художника/аниматора и он понятия не имеет про какую-то безопасность (как и я, кстати). Он просто накидал туда png-картинок и поставил на последний кадр примитивное gotoAndPlay(1). Там нет никаких связанных классов и прочего.

Я вообще новый программист в коллективе (и собственно единственный Flash-программист тут). Взялся за проект после предыдущего программиста. Кое какие косяки подправил и начальство решило что проект нужно с нуля переделать, так как то что там было намудрено уже никого не устраивало. И вот получается что все ресурсы (png и swf) сохранились. Я лишь пишу Game.swf. Но раньше всё это как-то грузилось и работало. А вот в моём варианте одни ошибки по безопасности.

Что можно сделать, чтобы каждый игровой swf-файл не перекомпилировать со связанным классом? Может просто все объекты грузить как набор байтов (ByteArray) и потом преобразовывать либо в Bitmap, либо в MovieClip?

dimarik 29.02.2012 22:15

Мои советы не осилили?

s3dworld 01.03.2012 12:34

dimarik
Цитата:

Мои советы не осилили?
Просто не очень хочется использовать хак. Что на счёт ByteArray?

ChuwY 01.03.2012 13:18

У вас работает больше, чем у друга, потому что приложение, скорее всего, находится в доверенном каталоге.

dimarik 02.03.2012 11:06

Какой хак? Вы что, местных специалистов по FP-безопасности наслушались? Никогда это не было хаком!

И опять эти "Доступ только к локальным файлам", "доступ только к сети". Это относится только к локальной песочнице. Зазубрите это как Отче наш! Есть четыре типа песочниц.
- local-with-networking этот ваш "доступ только к сети";
- local-with-filesystem — "Доступ только к локальным файлам";
- local-trusted — режим беспредела. Включается красной кнопкой, местоположение которой уже известно комраду ChuwY;
- remote.

Первые три вида песочниц внезапно наступают при запуске файла локально с файловой системы. Вот ведь новость!

Но это же не ваш случай! Ваше все в "remote". Пофиг с каким флагом скомпилена флешка, вы загрузили ее с удаленного хоста (даже если со своего локально установленного денвера или IIS).

Выяснили, аха.
Что происходит? Домен vkontakte.ru (Loader.swf) хочет загрузить домен mysite.ru (Game.swf). FP выделяет ему свой собственный SecurityDomain, копируя, заметьте, все свои внутренние классы, включая Object. Все, приехали. Теперь этим доменам ну никак нельзя общаться, пока каждый не разрешит доступ к
а) своему тельцу через Security.allowDomain("домен другого тельца"). LocalConnection.allowDomain("домен другого тельца"). Это "разрешение разработчика".
б) к контенту домена через crossdomain.xml. Это "разрешение распространителя".

Есть четыре способа загрузки классов в ApplicationDomain, но я вам их не скажу, не потому что я злой, а я немного злой, а потому что сейчас это пока не важно. Так вот, один из способов называется "импортирующей загрузкой", бро! Заметьте, это не хак, не шмак и не фигак. Это вам не фуфло какое-нибудь, которое гонят из под полы. Это импортирующая загрузка. Она импортирует... импортирует... импортирует один SecurityDoman в другой!

Итак, импортируем mysite.ru во vkontakte.ru. Вуаля! Game.swf уже во vkontakte.ru (теперь банановый!).
Аха, но у Game.swf теперь начались проблемки с доступом к mysite.ru. Ведь ваши дизайнеры (bоnfire.swf) не знакомы с гениальной архитектурой XII века, тьху, с политикой безопасности FP и не прописали в bоnfire.swf Security.allowDomain("домен врага"). Вы не поверите, но теперь весь контент из mysite.ru необходимо импортировать во vkontakte.ru.

Если с пониманием "разрешения разработчика" и доступом к SecurityDomain нет никаких проблем, то с доступом к контенту есть нюансы. Чтобы FP начал шевелить задницей и стал загружать контент из вражеского и только вражеского домена, ему необходимо разрешение распространителя. Этот документ оформляется в виде файла crossdomain.xml с перечнем доменов из которых разрешен доступ к сокровенному. Есть у вас на сервере crossdomain.xml с <allow-access-from domain="vkontakte.ru" />? Как прекрасно! Тогда очень скоро насладимся вашей нетленкой.

Да, все это касалось контента как swf. С картинками немного проще, если вы не собираетесь работать с их пикселями. checkPolicyFile в этом случае не нужно указывать. Loader загрузит изображение без запроса разрешения распространителя! Оп-па! Но как только ваши шаловливые ручки тронут хоть один байтик, даже хоть одну ссылочку на loader.contect этого рисуночка (к Bitmap#draw() это тоже отностися ), как тут же выскочит чертик из табакерки и поругает "Алярм! Алярм! Белые в городе! SecurityError: Error #2122: Необходим файл политики, но, когда были загружены эти мультимедийные данные, флаг checkPolicyFile не был установлен." Но мы же хорошие и указываем checkPolicyFile в таком случае. Ха! А если у нас нет возможности подкрутить crossdomain.xml, тогда читаем мой блог.

Гляньте, какой красивый http://cs5504.vkontakte.ru/crossdomain.xml. Теперь вы понимаете, что домену mysite.ru ничего не светит в плане пикселей?

Тема секурности FP сама по себе удивительна и увлекательна. Приятного вам полета.

MikroAcse 02.03.2012 11:09

Цитата:

- local-trusted — режим беспредела. Включается красной кнопкой, местоположение которой уже известно комраду ChuwY;
Я тоже хочу знать!

dimarik 02.03.2012 11:18

Так комрад любезно поделился ссылкой, если вы не заметили.


Часовой пояс GMT +4, время: 05:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.