Не работают сокеты в Flash Player

В версиях Adobe Flash Player выше 9.0.115.0 могут работать неверно некоторые из следующих конфигураций:

  • Файл SWF пытается предоставить сокет-соединение или соединение XMLSocket обратно собственному хосту, не выполняя при этом вызов loadPolicyFile для получения файла политики сокетов.
  • Файл SWF пытается предоставить сокет-соединение или соединение XMLSocket обратно собственному хосту и загружает файл политики сокетов, который не содержит его собственный домен в списке разрешенных доменов.
  • Файл SWF пытается предоставить сокет-соединение или соединение XMLSocket обратно любому хосту с использованием файла политики HTTP, предоставляющим соответствующее разрешение.

Инструкции, позволяющие определить, затрагивает ли это изменение ваш сайт, находятся в разделе Диагностика.

Причина

В версиях Flash Player, более поздних, чем 9.0.115.0, изменены требования к разрешениям для сокет-соединений. Файлы политики HTTP теперь не могут выполнять авторизацию сокет-соединений. В Flash Player имеется два типа файлов политики:

  • Файлы политики HTTP, представляющие собой файлы crossdomain.xml на сервере, которые определяют, могут ли файлы SWF с других доменов загружать содержимое данного сервера.
  • Файлы политики сокетов, определяющие порты, к которым может подключаться Flash Player с использованием соединения Socket или XMLSocket.

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

  • если домен, обслуживающий файл SWF, совпадал с доменом сокет-соединения, и
  • на обслуживающем домене был размещен файл crossdomain.xml.

Такая конфигурация представляла риск для пользователей, поскольку возрастающее число критических служб обслуживается с портов выше 1024. Данное изменение также позволило снизить вероятность атаки DNS Rebinding с использованием сокетов Flash Player для доступа к хосту жертвы. Для снижения риска возникновения данной проблемы Flash Player теперь требует файл политики сокетов для всех сокет-соединений, независимо от порта назначения и наличия файла crossdomain.xml. Теперь для файлов политики сокетов установлено фиксированное базовое местоположение на порту 843. Файл политики сокетов на этом порту сможет определять метаполитики, в свою очередь определяющие, разрешены ли на данном хосте другие файлы политики сокетов. По умолчанию разрешены все файлы политики сокетов.

Если раньше файлы SWF могли выполнять соединение со своим хостом происхождения на портах выше 1024 при наличии файла crossdomain.xml, то сейчас необходимо наличие файла политики сокетов. Файл политики сокетов может обслуживаться как с базового порта политики сокетов (843), так и с порта, с которого обслуживается сокет-соединение.

Диагностика

Используйте приведенную информацию, чтобы определить, затрагивает ли это изменение ваш сайт. В Flash Player 9.0.115.0 появилась новая функция — журнал файлов политики. В журнале файлов политики отображается сообщение для каждого действия, связанного с файлами политики: попытки получить их, успешные и безуспешные попытки их обработки, а также судьба запросов на их основе. Полное описание сообщений журнала файлов политики находится в Приложении B к Изменениям в файлах политике в Flash Player 9 и 10.

Чтобы начать пользоваться журналом файлов политики:

  1. Установите версию отладчика Flash Player 9.0.115.0 или более позднюю. Можно использовать любой тип Flash Player: ActiveX, внешний модуль или версию в виде отдельного продукта. Версию отладчика Flash Player можно найти в Загрузках технической поддержки Flash Player.
  2. Определите местоположение файла конфигурации mm.cfg. Это основной файл конфигурации отладки, который версии отладчика Flash Player считывают в процессе загрузки. Файл mm.cfg находится в домашнем каталоге. Например:

    • Windows: C:\Documents and Settings\имя_пользователя
    • Windows Vista: C:\Users\имя_пользователя
    • Mac OS и Linux: /home/имя_пользователя
  3. Если файла mm.cfg не существует, необходимо создать его и добавить в него одну или обе из следующих строк:

    • PolicyFileLog=1 # Включает журнал политики файлов
    • PolicyFileLogAppend=1 # Необязательно; не очищать журнал при записи
    • Если параметр PolicyFileLogAppend не включен, каждый файл SWF корневого уровня будет очищать файл журнала. Если параметр policyfilelogappendpolicyfilelogappend<> включен, имеющееся содержимое файла журнала всегда будет сохраняться, запись будет производиться в конце файла.

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

  4. Найдите местоположение, в котором размещается или будет размещен файл журнала. Оно не обязательно должно существовать, Flash Player может создать его при следующем запуске файла SWF. Файл policyfiles.txt может находиться в следующих папках:
    • Windows: C:\Documents and Settings\имя_пользователя\Application Data\Macromedia\Flash Player\Logs
    • Windows Vista: C:\Users\имя_пользователя[ AppData]\Roaming\Macromedia\Flash Player\Logs
    • Mac OS: /Users/имя_пользователя/Library/Preferences/Macromedia/Flash Player/Logs (обычно программы не записывают файлы журнала в папку Preferences, но в данном случае это так)
    • Linux: /home/имя_пользователя/.macromedia/Flash_Player/Logs
  5. Чтобы проверить настройки, запустите любой файл SWF, а затем закройте Flash Player (или браузер).

  6. Теперь вы можете найти файл policyfiles.txt в папке Logs. Убедитесь в том, что он был изменен только что (проверьте время последнего изменения). Откройте его и убедитесь, что появилось по крайней мере одно сообщение ("Root-level SWF loaded"). Если это так, то журнал файлов политики работает.

  7. Посетите SWF-содержимое, которое необходимо протестировать. Запустите содержимое при помощи любого сценария, который приведет к обращению к файлам политики. После завершения закройте Flash Player.
  8. Изучите файл policyfiles.txt на предмет информации о том, что произошло с файлами политики в процессе тестового запуска. Если вы видите непонятные сообщения, изучите статью Policy file changes in Flash Player 9 and 10 (англ.).

  9. Если вы нашли в policyfiles.txt полезную информацию, которую необходимо сохранить для дальнейшего пользования, присвойте файлу журнала другое имя или переместите его в другую папку, чтобы Flash Player не перезаписал журнал при последующем запуске.

Решение. Создайте политику сокетов, разрешающую подключение к хосту

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

Изменения, касающиеся политики сокетов, детально описаны в статье Policy file changes in Flash Player 9 and 10 (англ.). Сообщения журнала детально описаны в Приложении B.

Подробная информация

Информация о безопасности Flash Player находится на странице по безопасности Flash Player (англ.).

Изменения, касающиеся файлов кросс-доменной политики и политики сокетов, детально описаны в статье Policy file changes in Flash Player 9 and 10 (англ.).

Эта работа лицензируется в соответствии с лицензией Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported  На посты, размещаемые в Twitter™ и Facebook, условия Creative Commons не распространяются.

Правовые уведомления   |   Политика конфиденциальности в сети Интернет