Странное с Флешем

Я с «Флешем» в последние годы не сталкивался, но и прежде подобного поведения не наблюдал. В общем, решил я вчера обновить в нашем продукте библиотеку ВебКамДжиЭс, она у нас для получения фотографии с камеры используется. Прежняя была 0.9, а тут я случайно обнаружил, что релиз вышел.

В прежней изображение с камеры получалось через Флеш, а релизная умеет использовать АПИ браузера, если таковое имеется. Правда, в «Сафари», которым я пользуюсь, этого АПИ нет и всё равно используется Флеш. Вот тут-то и столкнулся с трудностями — прежняя версия работала прекрасно, а новая отказывалась — в окне Флеша изображение с камеры есть, но ДжаваСкрипт был уверен, что всё плохо и, самое главное, не мог достучаться до Флеша.

В принципе, можно было откатиться на предыдущую версию, но смущало, что на демо-сайте ВебКама в «Сафари» всё работало нормально. Я попробовал несколько вариантов, прежде чем мне пришла в голову идея посмотреть заголовки запросов. И заметил разницу, показавшуюся несущественной, но всё-таки я решил попробовать её устранить — mime type различался.

У нас сервер отдавал Флеш с типом «application/x-shockwave-flash», а в демо-примере был «binary/octet-stream». Стоило поменять этот заголовок, и всё заработало.

Беглое гугление света не пролило, но если столкнётесь с похожей проблемой, имейте ввиду, возможное решение — смена типа для отдаваемого флеш-ролика.
Комментировать
23 августа 2014 12:36

Flash и безопасность

В качестве вялых воскресных препирательств, на «Хабре» как-то неожиданно вылезла мнимая проблема Flash — что загрузив ролик, можно попытаться получить доступ к cookie сайта или сделать какие-то другие интересные недобрые вещи.

Между тем, правил для защиты от таких «уязвимостей» всего два: выдавать при обращении к заливаемым пользователем Flash заголовки для скачивания (а то и вообще отдавать все пользовательские ролики с другого домена, порта или протокола) и указывать правильные параметры для проигрываемых роликов, залитых пользователем. Последнее — нехитрая наука, таких параметров всего три: allowScriptAccess, allowNetworking и allowFullScreen.

Их назначение легко расшифровывается по названию.

Параметр allowScriptAccess (введен во Flash 6.0.40.0) управляет доступом к JavaScript/DOM браузера и имеет три возможных значения: «always», «sameDomain» и «never». Пояснения, на мой взгляд, требует только значение «sameDomain». Если выбрано это значение, то доступ предоставляется только скриптам, которые загружены с того же домена, что и страница, куда они подключены.

Следующий параметр, allowNetworking (работает, начиная с Flash 9.0) разрешает или запрещает обращение Flash к собственным сетевым функциям и сетевым функциям браузера. Имеет значения «all», «internal» (запрещает использование сетевых функций браузера) и «none».

Параметр «allowFullScreen» (Flash 9 и выше) принимает два возможных значения — «false» (выставлено по умолчанию) или «true», которые (соотвественно) запрещают или разрешают использование полноэкранного режима.

Очевидно, что наиболее безопасные параметры — allowScriptAccess="never", allowNetworking="none" и allowFullScreen="false":
<object height="400" width="500">
<param name="allowScriptAccess" value="never" />
<param name="allowNetworking" value="none" />
<param name="movie" value="ролик.swf" />

<embed type="application/x-shockwave-flash"
     allowScriptAccess="never" allowNetworking="none" src="ролик.swf" height="400" width="500" />

</object>
Очень жаль, но значение «never» для параметра для параметра «allowScriptAccess» сейчас является deprecated, так же как и использование параметра allowNetworking, когда страница, на которой подключен ролик и сам ролик загружаются с одного и того же домена.

Насколько я понимаю, это связано с тем, что фирма Adobe, текущий владелец технологии Flash, не хочет брать на себя ответственно за утечку критичных данных через Flash-ролики. Вместо использования этих значений параметров рекомендуется загружать Flash-ролики с другого домена и не допускать того, чтобы критичные данные и ролики были доступны с одного домена.
12 комментариев
15 ноября 2009 15:17

Alternativa Game

На блоге «Флэш Потрошитель» увидел ссылку на любопытный проект — движок Alternativa3D (есть небольшая демострационная версия, нещадно отъедающая память).

Alternativa3D (81.40КиБ)

Alternativa3D — движок для MMORPG Alternative, который сделан на Flash9. В демонстрационной версии представлен небольшой кусок ланшафта с дорогами, травой, деревьями и домом. Всё это можно вращать, менять угол обзора. Скорость очень приличная — я попробовал игру на второй домашней машине, очень слабенькой (Pentium III-1.1GHz, 512Mb, GeForce3 Ti200), ниже 25 fps не опускается. Основные характеристики движка: У создателей игры большие планы:

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

Играющие имеют возможность перемещаться по виртуальному миру, взаимодействовать друг с другом: общаться, драться, обмениваться предметами, покупать и продавать их; арендовать и покупать недвижимость, развивать собственные навыки и физические данные, организовываться в группы для достижения общих целей.
Любопытно будет взглянуть.
Комментировать
2 ноября 2007 22:43