Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.05.2014, 01:39
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 1  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
По умолчанию Ошибка безопасности

Добрый вечер! Стоит задача разработать онлайн чат для сайта. Пребегли к помощи бинарных сокетов. Но в флеше нужно дать отачу файла безопасности, дабы не было ошибки "[SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2048"]"
Вот сам файл, написанный на perl:
Код:
    #!/usr/bin/perl
    #
    # policyd.pl
    # Simple socket policy file server
    #
    # Usage: policyd.pl [-port=N] -file=FILE
    # Logs to stdout
    #
     
    use strict;
    use Socket;
     
    my $NULLBYTE = pack( 'c', 0 );
     
    my $port = 843;
    my $filePath;
    my $content;
     
    ### READ ARGS
     
    while ( my $arg = shift @ARGV )
    {
        if ( $arg =~ m/^--port=(\d+)$/ )
        {
            $port = $1;
        }
        elsif ( $arg =~ m/^--file=(.*)/ )
        {
            $filePath = $1;
        }
    }
     
    unless ( $filePath )
    {
        die "Usage: policyd.pl [--port=N] --file=FILE\n";
    }
     
    ### READ FILE
     
    -f $filePath or die "No such file: '$filePath'\n";
    -s $filePath < 10_000 or die "File probably too large to be a policy file: '$filePath'\n";
     
    local $/ = undef;
    open POLICYFILE, "<$filePath" or die "Can't open '$filePath': $!\n";
    $content = <POLICYFILE>;
    close POLICYFILE;
     
    $content =~ m/cross-domain-policy/ or die "Not a valid policy file: '$filePath'\n";
     
    ### BEGIN LISTENING
     
    socket( LISTENSOCK, PF_INET, SOCK_STREAM, getprotobyname( 'tcp' ) ) or die "socket() error: $!";
    setsockopt( LISTENSOCK, SOL_SOCKET, SO_REUSEADDR, pack( 'l', 1 ) ) or die "setsockopt() error: $!";
    bind( LISTENSOCK, sockaddr_in( $port, INADDR_ANY ) ) or die "bind() error: $!";
    listen( LISTENSOCK, SOMAXCONN ) or die "listen() error: $!";
     
    print STDOUT "\nListening on port $port\n\n";
     
    ### HANDLE CONNECTIONS
     
    while ( my $clientAddr = accept( CONNSOCK, LISTENSOCK ) )
    {
        my ( $clientPort, $clientIp ) = sockaddr_in( $clientAddr );
        my $clientIpStr = inet_ntoa( $clientIp );
        print STDOUT "Connection from $clientIpStr:$clientPort\n";
       
        local $/ = $NULLBYTE;
        my $request = <CONNSOCK>;
        chomp $request;
     
        if ( $request eq '<policy-file-request/>' )
        {
            print STDOUT "Valid request received\n";
        }
        else
        {
            print STDOUT "Unrecognized request: $request\n\n";
            close CONNSOCK;
            next;
        }
     
        print CONNSOCK $content;
        print CONNSOCK $NULLBYTE;
        close CONNSOCK;
     
        print STDOUT "Sent policy file\n\n";
    }
     
    # End of file.
Но ошибка не пропадает. Можете подсказать, что не так?

Старый 21.05.2014, 08:15
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А где содержимое самого файла политик?
__________________
Ко мне можно и нужно обращаться на ты)

Старый 21.05.2014, 10:05
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 3  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
Это он и есть

Старый 21.05.2014, 10:22
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Это не он. Кто вообще писал этот скрипт?

В перл не силен, но тут и перл знать не надо, чтобы понять, что ссылка на файл политик должна выделяться из переданных аргументов с помощью регулярного выражения вот здесь:
Код:
while ( my $arg = shift @ARGV )
    {
        if ( $arg =~ m/^--port=(\d+)$/ )
        {
            $port = $1;
        }
        elsif ( $arg =~ m/^--file=(.*)/ )
        {
            $filePath = $1;
        }
    }
Значит сам файл должен физически храниться в какой-то директории.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 21.05.2014, 10:43
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 5  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Приведенный перл-скрипт не что иное, как реализация на перле простейшего сокет-сервера (вполне себе достойная реализация, нужно отметить).
При запуске этого скрипта на сервере создается сокет, слушающий определенный порт (843 по умолчанию) и при коннекте на него клиенту отдается содержимое файла политик безопасности.
Т.е. что нужно:
- создать собственно сам файл политик (формат файла см. в справке адоба)
- положить этот файл в какую-либо директорию на сервере
- запустить на сервере скрипт "policyd.pl --port=843 --file=<путь_к _файлу_политик>" и убедиться, что запустился он без ошибок
- и только после этого пытаться запустить флешку на клиенте

Полезно в момент запуска флешки на клиенте смотреть на сервере консольный вывод запущенного скрипта.

Старый 21.05.2014, 16:09
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 6  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
Вы имеете ввиду вот этот файл?
Код:
    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
       <site-control permitted-cross-domain-policies="master-only"/>
       <allow-access-from domain="*" to-ports="*" />
    </cross-domain-policy>

Старый 21.05.2014, 16:22
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 7  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Мы - да.

Старый 21.05.2014, 17:33
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 8  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
Значить файл есть. Почему тогда есть ошибка? Может для ответа нужна дополнительная информация - спрашивайте, всё расскажу.

Старый 21.05.2014, 17:45
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Расставьте промежуточный вывод. Проверьте записывается ли содержимое этого файла в переменную. И, кстати, флешплеер точно стучится туда с запросом файла политик?
__________________
Ко мне можно и нужно обращаться на ты)

Старый 21.05.2014, 18:48
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 10  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
Код AS3:
Security.loadPolicyFile("xmlsocket://" + Main.HOST + ":843");
При локальном запуске этой ошибки нет. Только на сервере. Значит ли это, что на сервере не хватает какой-то программы?

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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