Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Сокеты и политика безопасности (http://www.flasher.ru/forum/showthread.php?t=111646)

sp2k6 04.05.2008 17:22

Сокеты и политика безопасности
 
Народ, вот такая ситуация:
Есть пхп демон, который играет роль сокет-сервера, стоит на одном домене, есть flex приложение - клиент, который лежит на другом домене и коннектится к серверу. На стороне сервера в корне сервера лежит файл crossdomain.xml, со следующим содержимым:
Код HTML:

<cross-domain-policy>
<allow-access-from domain="*" to-ports="9876"/>
</cross-domain-policy>

На сервере, в случае запроса через сокет "<policy-file-request/>" отправляю содержимое crossdomain.xml и закрываю сокет.

На клиенте по creationComplete() есть следующий код:
Код:

Security.loadPolicyFile('http://myhost.ru/crossdomain.xml');
В итоге, часто у пользователей появляется ошибка, вызываемая по евенту onSecurityError у класса Socket (сейчас не могу точно сказать что за ошибка, вечером напишу), и у меня у самого после обновления флеш-плеера появилась такая же ошибка, переустанавливал плеер, ставил более раннюю версию - ничего не помогает.
Вот адрес самой флешки: http://vkontakte.ru/apps.php?act=s&id=3933&mid=187882,
адрес crossdomain.xml: http://flyostrie.ru/crossdomain.xml

etc 04.05.2008 17:25

crossdomain.xml нужно отдавать либо по тому же сокету, к которому происходит коннект, либо по порту 843.

Т.е. для сокетных соединений crossdomain.xml, лежащий на http-сервере, работать не будет.

sp2k6 04.05.2008 17:27

Все так и делаю, использую свой рабочий порт 9876, если приходит строка "<policy-file-request/>" - отдаю crossdomain.xml и рву коннект.

И еще главная непонятность - почему у кого то работает, а у кого то нет? Подозреваю что это зависит от версии flash - плеера.

etc 04.05.2008 17:29

А где на клиенте строка Security.loadPolicyFile("xmlsocket://flyostrie.ru:9876"); ?

А подозрение верное, потому как раз в последнем билде плеера это реализовано.

sp2k6 04.05.2008 17:33

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

etc 04.05.2008 17:34

Цитата:

Сообщение от sp2k6 (Сообщение 737034)
Вообще она раньше вызывалась перед созданием сокета, но от неё толку не было и я её закомментил, то есть, другими словами сейчас её вообще нет.

Теперь она нужна.

sp2k6 04.05.2008 17:39

ага, понял, то есть, у тех, у кого старая версия плеера и без этой "Security.loadPolicyFile("xmlsocket://flyostrie.ru:9876");" строки работало, а у тех, кто обновил плеер этой строки как раз и не хватает... Спасибо за разъяснение, дома перекомпилю - отпишусь о результате!
Но, вопрос, почему же тогда плеер отправляет запрос "<policy-file-request/>" серверу, если в коде нет запроса "Security.loadPolicyFile("xmlsocket://flyostrie.ru:9876");" ?

etc 04.05.2008 17:49

Плеер всегда пытается стянуть кроссдоменник. Последний билд сначала лезет на 843-ий порт, потом на тот же порт, на который открыт сокет. Основной сокет по какому порту работает?

sp2k6 04.05.2008 17:56

По 9876.

etc 04.05.2008 18:27

Хм, тогда не уверен, что строчка поможет.

sp2k6 04.05.2008 18:37

Чесно говоря, я тоже... Какой же выход? В демоне открывать еще 843 и через него отдавать crossdomain.xml ?

sp2k6 05.05.2008 11:32

Перекомпилил. Раскомментирование строчки запроса crossdomain.xml дало странный результат - приложение запрашивает у серва crossdomain.xml, евент SecurityErrorEvent.SECURITY_ERROR не срабатывает, но при коннекте теперь соединение не устанавливается вообще (не срабатывает евент 'onRequest')...
Зато я теперь точно знаю код ошибки - Error #2048

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

Nicolas Prof 05.05.2008 16:26

По этой же теме есть проблема.
Есть сокет сервер на Ява. Обслуживает работу флэш чата. С 115 билдом плеера, все было отлично. С выходом 124, чат начал выдавать SecurityError.
Открыли 843 порт. И проблема в том, что не получаем никакого запроса "<policy-file-request/>", что бы отдать crossdomain. В чем может быть проблема?

etc 05.05.2008 16:31

Кто-нибудь уже догадается взять сниффер и посмотреть, куда и зачем флеш шлет запросы?

sp2k6 05.05.2008 17:01

Цитата:

Открыли 843 порт. И проблема в том, что не получаем никакого запроса "<policy-file-request/>", что бы отдать crossdomain.
Оп.. похоже мне тоже это не поможет..

Цитата:

Кто-нибудь уже догадается взять сниффер и посмотреть, куда и зачем флеш шлет запросы?
Посмотрим, только зачем, я и так знаю что плеер спрашивает по рабочему сокету. При беглом осмотре видно что и на 843 порт тоже пытается законнектиться...

sp2k6 06.05.2008 12:28

Проблема решена, плеер действительно стучится на 843 порт за файлом, пример демона на перле и питоне мон найти тут:
http://www.adobe.com/devnet/flashpla...icy_files.html .
Всем спасибо, особенно, __etc, помог разрулить некоторые вещи!


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

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