Генерация Cookie

Discussion in 'PHP' started by Hwma, 20 Aug 2009.

  1. Hwma

    Hwma New Member

    Joined:
    7 Jul 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Привет, подскажите каким образом может генерироваться кукис при авторизации на сайте? Пишу прогу, которая будет логиниться на сайт и парсить некоторую инфу. По шагам:
    Логинюсь на сайт, параллельно смотрю снифером какие заголовки и POST данные передаются.
    Делаю POST запрос на сайт с абсолютно точно такими же заголовками и POST данными, но в ответ получаю какие-то "неправильные" кукисы, которые естественно сервер не принимает и не авторизовывает.
    Для примерна, когда логинюсь браузером, то получаю вот такие кукисы:
    После посылки пост запроса программой, мне возвращаются вот такие кукисы:
    В первом кукисе есть вот такой вот кусочек: "client_res=1280x1024". То есть кукисы как-то редактируются толи жабаскриптом, толи хз как. И вот собственно вопрос, как можно получить нормальный кукис ?
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Где конкретно авторизоваться пытаешься?
     
    _________________________
  3. Hwma

    Hwma New Member

    Joined:
    7 Jul 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Я про что и говорю. Хочу разобраться как эти данные попадают в кукисы
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Определяются серверным скриптом + javascript скорее всего и потом прописываются в куки после авторизации, причем здесь пост запрос, от человека будут требовать в пост запросе его разрешение экрана? Смешно
     
  5. Hwma

    Hwma New Member

    Joined:
    7 Jul 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Каким образом можно узнать эту инфу, которая записывается в кукисы и передать ее серверу, чтобы он ее принял?
     
  6. Hwma

    Hwma New Member

    Joined:
    7 Jul 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Да разрешение это фигня, там тем более в передаваемом заголовке Cookie еще много чего непонятно откуда взявшегося, например mrcu
     
  7. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,515
    Likes Received:
    400
    Reputations:
    196
    Шлешь на сервак запрос для авторизации с паролем и логином - в ответ получаешь куки, и далее все запросы на сервак шлешь вместе с этими куками
     
  8. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Ага, полностью согласен, два запроса, первый - авторизация и получение кук, второй - поход на нужную страницу, и не париться, откуда и что тебе в куки вставляют, просто получить

    Вот пример авторизации на ачаде, именно этот пример показывает, что нам пофигу, что там в куки пишется и откуда это берется:

    PHP:
    <?php 
    $user 
    'Pashkela'
    $pass md5('лолохоцкер123$!#--?'); 
    // Раззззз.......
    $cl curl_init('/login.php?vb_login_username='.$user.'&vb_login_password=&cookieuser=1&s=&do=login&forceredirect=1&vb_login_md5password='.$pass); 
    curl_setopt($clCURLOPT_RETURNTRANSFER1); 
    curl_setopt($clCURLOPT_USERAGENT'Opera/9.25 (Windows NT 5.1; U; ru)'); 
    curl_setopt($clCURLOPT_REFERER'/'); 
    curl_setopt($clCURLOPT_HEADER1); 
    curl_setopt($clCURLOPT_COOKIEJAR'coockie.txt'); 
    $ex curl_exec($cl); 
    curl_close($cl);
    // Два...... 
    $exec curl_init('/index.php'); 
    curl_setopt($execCURLOPT_RETURNTRANSFER1); 
    curl_setopt($execCURLOPT_USERAGENT'Opera/9.25 (Windows NT 5.1; U; ru)'); 
    curl_setopt($execCURLOPT_REFERER'/'); 
    curl_setopt($execCURLOPT_HEADER1); 
    curl_setopt($execCURLOPT_COOKIEFILE'coockie.txt'); 
    $page curl_exec($exec); 
    curl_close($exec); 
    preg_match('#<div class="bigusername">(.*)</div>#',$page,$username); 
    preg_match('#\(<b>(.*)<\/b>\/(.*)\)#',$page,$messg); 
    echo 
    'У пользователя <b>'.$username[1].'</b>&nbsp;&nbsp;'.$messg[0].'&nbsp;сообщений.'
    ?>
    зачем создавать отдельную тему - непонятно, таких вопросов миллион (как и ответов) по форуму
     
    #8 Pashkela, 21 Aug 2009
    Last edited: 21 Aug 2009
  9. Hwma

    Hwma New Member

    Joined:
    7 Jul 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Это все понятно. Только дело то в том, что ответный заголовок вот такой:
    а дальше на сервер посылаются заголовки с кукисами, где от ответного заголовка только PHPSESSID и uid (как видно из первой цитаты первого поста), и куча параметров которые беруться непонятно откуда, видимо яваскриптом, но среди всех яваскриптов, которые я там увидел, яваскрипта, который хотябы будет разрешение брать я не нашел, кроме счетчика, или скрипта который будет изменять кукисы: document.cookie
     
  10. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Уже заддосили:))

    как заработает - наверное таки напишут
     
  11. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    Вы вопроса не догоняете видимо. Кароче смысл - во многих крупных проектах авторизация не так проста как кажется, благодаря js, который дает дополнительные параметры для создания сессии, и соответственно логин без них не проходит.Например данные передаются аяксом(каждый раз могут быть уникальными(соответственно 2 раза их послать уже нельзя). Столкнулся с этой проблемой сам, не так давно.
    Вообщем сразу к решению:
    1) Если парсер пишешь(ну или что ты там делаешь) под один проект, то можно рассматривать джаваскрипты, как они создают эти уникальные ключи, куда отсылают и прочее. Однако часто они обфускации подлежат, да и криптуют + сжимают, что разобраться с ними порой не выгодно. Овчинка выделки не стоит, как говорят. Тогда на этот случай есть 2 решение.
    2) Решение 2, юзать готовые браузеры,т.к. в них есть js, причем их DOM полюбому поддерживает проект. Здесь тоже куча вариантов, берешь IE или gecko движек и вперед.Но тут уж скриптами не обойдешься.
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    2TC Учите пхп, в нем все написано, это для 2 сервера, с небольшими изменениями будет работать и с первым:
    PHP:
    //===================================
        
    $login='логин';
        
    $pass='пароль';
    //===================================

        
    @set_time_limit(0);
        @
    ini_set("max_execution_time"0);

        
    $cookie=array();
        
        function 
    post($url='',$content='',$referer='')
        {
            GLOBAL 
    $cookie;

            
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL,$url);
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
            
    curl_setopt($chCURLOPT_TIMEOUT15);
            
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
            if (!empty(
    $cookie)) curl_setopt($chCURLOPT_COOKIEimplode('; ',$cookie));
            if (!empty(
    $content)) {curl_setopt($chCURLOPT_POST1);curl_setopt($chCURLOPT_POSTFIELDS$content);} else {curl_setopt($chCURLOPT_POST0);}
            if (!empty(
    $referer)) curl_setopt($chCURLOPT_REFERER$referer);
            
            
    $ss=curl_exec($ch);
            
    curl_close($ch);
            if (
    preg_match_all('#^Set-Cookie: (([^;=]+)=([^;=\r\n]+))#mi',$ss,$cook)) 
            {
                if (
    $tmpcookie=array_combine($cook[2],$cook[1]))
                    
    $cookie=(array)$tmpcookie + (array)$cookie;
            }
            return 
    $ss;
        }
        
    post('http://g2.botva.mail.ru/login.php','server=2&email='.urlencode($login).'&email2=mail.ru&passWord='.urlencode($pass).'&b_msg_go2.x=47&b_msg_go2.y=27&main=','http://g2.botva.mail.ru/index.php');
        echo 
    post('http://g2.botva.mail.ru/index.php');
    qBiN То что один человек сделал - другой завсегда сломать сможет. А полагаться на яваскрипты - это терять многих пользователей, кто ими не пользуется
     
    _________________________
    1 person likes this.
  13. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    В данном сабже про яваскрипты чушь. Вот рабочий скрипт авторизации на ботве на основании мною вышесказанного:

    PHP:
    <pre>
    <? 
    @set_time_limit(0); 
    @
    ini_set("display_errors","1");
     
    $mail ''// Ваша почта на mail.ru, всё, что до @mail.ru 
    $pass '';// Пароль от почты  
    // Раззззз....... АВТОРИЗАЦИЯ
    $cl curl_init('http://g2.botva.mail.ru/login.php');  
    curl_setopt($clCURLOPT_RETURNTRANSFER1);  
    curl_setopt ($clCURLOPT_POST1);
     
    curl_setopt ($clCURLOPT_POSTFIELDS"server=2&email=$mail&email2=mail.ru&passWord=$pass&submit.x=94&submit.y=14");
    curl_setopt($clCURLOPT_USERAGENT'Opera/9.25 (Windows NT 5.1; U; ru)');  
    curl_setopt($clCURLOPT_REFERER'http://g2.botva.mail.ru/index.php');  
    curl_setopt($clCURLOPT_HEADER1);  
    curl_setopt($clCURLOPT_COOKIEJAR'coockie.txt');  
    $ex curl_exec($cl);  
    curl_close($cl); 
    // Два...... ИДЁМ НА ЛЮБУЮ СТРАНИЦУ САЙТА, НО УЖЕ АВТОРИЗОВАННЫЕ 
    $exec curl_init('http://g2.botva.mail.ru/tour.php');  
    curl_setopt($execCURLOPT_RETURNTRANSFER1);  
    curl_setopt($execCURLOPT_USERAGENT'Opera/9.25 (Windows NT 5.1; U; ru)');  
    curl_setopt($execCURLOPT_REFERER'http://g2.botva.mail.ru/login.php');  
    curl_setopt($execCURLOPT_HEADER1);  
    curl_setopt($execCURLOPT_COOKIEFILE'coockie.txt');  
    $page curl_exec($exec);  
    curl_close($exec);  
    echo 
    $page;
    ?>
    </pre>
    ну и Gifts риспект, впрочем как и всегда (практически тоже самое, только оформленное в виде функции с небольшими изменениями в алгоритме)

    PS: Какие куки вы в итоге получили всегда можете посмотреть в файле, который создается автоматически в той же папке, где был запущен сам скрипт - coockie.txt

    все необходимые данные элементарно цепляются из tamper data (плагин для FireFox), что было уже озвучено выше.

    Итог: обычнейшая авторизация, ничем вообще не отличающаяся по сложности от авторизации на ачаде.

    Приведен пример авторизации на сервере g2, так как не мог зарегица на сервере g1, потому что он официально работает только до 1 ноября 2008 года.
     
    #13 Pashkela, 21 Aug 2009
    Last edited: 21 Aug 2009
  14. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    Яхуу, всмысле yahoo.com посмотрю как ты настройки ящика будешь менять без js. Хороший пример я думаю.
     
  15. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    перевести можно, но затратно. Долго пример искать не хочу, вот пример обфускованого кода, правда он тут не закодирован escape`ами и прочим. http://l.yimg.com/d/lib/bc/bc_2.0.4.js скрипт самый маленький, который нашел)
     
    #15 qBiN, 22 Aug 2009
    Last edited: 22 Aug 2009
  16. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    ну если ты не заметил, то этот скриптик используется для передачи данных о пользователе картинке по урлу http://us.bc.yahoo.com/b
    вот это вообще не понял, что ты написал.
    ---
    Это кажется все просто, пока не начнешь работать с этим.
     
  17. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    А теперь читаем выше
    --
    ну и народ пошел
     
  18. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    ахаха) это js)))
    --
    Закончил оффтоп.