Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Ввод капчи (https://forum.antichat.xyz/showthread.php?t=137671)

programming 27.08.2009 13:01

Ввод капчи
 
Появилась новая проблема.. Совсем недавно я спрашивал как можно вытащить капчу со страницы.. Вот эта тема - http://forum.antichat.ru/thread137573.html
Задача теперь состоит вот в чём:
1. пользователь заходит на сайт, в котором отображена только капча и поле ввода(то есть не на сайт с формой где реально располагается капча изначально)
2. пользователь вводит капчу и нажимает на кнопку после чего с помощью curl происходит заполнение формы.
НО! На следующей странице то уже будет другой url капчи..
В общем то именно это я и не знаю как обойти..

Gifts 27.08.2009 13:08

programming Не получится, значение капчи устанавливается в кукисы. Установить куки для чужого домена - не получится, не позволит политика безопасности браузера

З.Ы, людей украшает скромность - зачем срать на форуме создавая по 10 тем?

programming 27.08.2009 13:16

Цитата:

Сообщение от Gifts
programming Не получится, значение капчи устанавливается в кукисы. Установить куки для чужого домена - не получится, не позволит политика безопасности браузера

З.Ы, людей украшает скромность - зачем срать на форуме создавая по 10 тем?

Немного не понял.. По-моему Вы написали бред.. Или же напишите, что Вы подразумеваете под значением капчи..

А на счёт тем - не 10, а всего 2 и причём с совсем разными вопросами..

svesve 27.08.2009 13:25

Как я понимаю надо чтобы грубо говоря перед регой или заполнением формы пользователь заполнял капчу?
а потом уже получит доступ на страницу с формой на которой будет капча именно от этой формы?

geforse 27.08.2009 13:32

1. Заходим на сайт и получаем необходимые значения
  • Куки записываем: curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
2. Выводим картинку капчи и вводим в поле её значение
3. Отправляем cURL'ом это значение + значения из п.1
  • Используем: curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
4. Отправляем post запрос для заполнения формы на сайте, используем COOKIEFILE из п.3

programming 27.08.2009 13:32

Цитата:

Сообщение от svesve
Как я понимаю надо чтобы грубо говоря перед регой или заполнением формы пользователь заполнял капчу?
а потом уже получит доступ на страницу с формой на которой будет капча именно от этой формы?

Немного не так..
Значит есть два сайта - первый с формой регистрации(вместе с капчей), а второй, на котором отображена только капча и поле ввода.
Нужно, чтобы пользователь заходил на второй сайт вводил капчу, а уже php с помощью curl отправлял запрос на первый сайт уже со своими данными, но значением капчи, которое ввёл пользователь.

programming 27.08.2009 13:35

Цитата:

Сообщение от geforse
1. Заходим на сайт и получаем необходимые значения
  • Куки записываем: curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
2. Выводим картинку капчи и вводим в поле её значение
3. Отправляем cURL'ом это значение + значения из п.1
  • Используем: curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
4. Отправляем post запрос для заполнения формы на сайте, используем COOKIEFILE из п.3

Так в том то и дело, что не каких куков нет. Куки появляются только после того, как мы уже нажали на первом сайте на кнопку регистрация..
Быть может я чего-то не понимаю..

geforse 27.08.2009 13:38

Цитата:

Сообщение от programming
Быть может я чего-то не понимаю..

Да это я повидимому что-то не понимаю )
Если сайта два, то и капчи две и какое они имеют отношение друг к другу ?

Покажите ссылки

programming 27.08.2009 13:39

Ну или же если более конкретно поставить задачу теперь -нужно, чтобы пользователь вводил капчу на странице и на этой же странице после его ввода должен отправляться пост запрос. Вот какэто реализовать?

Сайт один на котором капча, а второй где распологается мой скрипт. А скрипт вытягивает капчу с первого сайта, поэтому капчи должны быть одинаковыми..

geforse 27.08.2009 13:40

Цитата:

Сообщение от programming
Ну или же если более конкретно поставить задачу теперь -нужно, чтобы пользователь вводил капчу на странице и на этой же странице после его ввода должен отправляться пост запрос. Вот какэто реализовать?

..
Цитата:

Сообщение от geforse
1. Заходим на сайт и получаем необходимые значения
  • Куки записываем: curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
2. Выводим картинку капчи и вводим в поле её значение
3. Отправляем cURL'ом это значение + значения из п.1
  • Используем: curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
4. Отправляем post запрос для заполнения формы на сайте, используем COOKIEFILE из п.3


programming 27.08.2009 13:45

Цитата:

Сообщение от geforse
..

Не понимаю как можно второй третий и четвёртый пункт сделать на одной странице..

geforse 27.08.2009 13:52

PHP код:

    if($_POST['captcha'])
    {
    
# Отправляем все данные (включая код капчи) на сервер) (см.п.3)
    
}
    else
    {
     
# cURL'ом получаем необходимые значения (см.п.1)
     # Выводим форму для ввода капчи (в hidden передаём необходимые значения) (см.п.2)
    
echo '<img src="captcha.jpg"><br>
       <form name="captcha_form" action="index.php" method="POST">
          <input type="text" name="captcha" value="" /><br>         
          <input type="hidden" name="HIDDEN-1" value="'
.$HIDDEN-1.'" />
          <input type="hidden" name="HIDDEN-2" value="'
.$HIDDEN-2.'" />
          <input type="submit" value="ok">
       </form>'

     } 


programming 27.08.2009 15:09

Нет.. Всё равно не получается.. В п.3 то уже другая сессия получается..
В общем не знаю уже, что делать.. Буду тогда конкретно спрашивать.
Итак, задача:
Есть сервис http://moemesto.ru. Нужно сделать скрипт, который вытаскивает капчу со страницы регистрации - http://moemesto.ru/register/?from=button. Создаёт форму где есть поле ввода и сама картинка капчи. Пользователь вводит код с картинки и нажимает на кнопку. В самом скрипте вшиты данные о регистрации - то есть логин, пароль и пр. С ними и происходит регистрация. В конце, после нажатия пользователем кнопки у него открывается страница, что всё успешно прошло.
Уже бьюсь с этим 3-й день - никакого эффекта.. Если хотите - могу дать мой код. Может ошибки найдёте..

geforse 27.08.2009 15:42

PHP код:

<?php
@set_time_limit(0);
//-----------------//
$accounts 'accounts.txt'// Файл для сохранения аккаунтов
$divider  ':';           // Раздеитель 
$login '';              // Login
$password '';          // Password
$email '';            //  E-mail
//-----------------//

       
function post($url,$post,$refer)
    {
       
$ch curl_init($url);
       
curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
       
curl_setopt($chCURLOPT_POST1);
       
curl_setopt($chCURLOPT_POSTFIELDS$post);
       
curl_setopt($chCURLOPT_REFERER$refer);
       
curl_setopt($chCURLOPT_COOKIEJAR"./cook1");
       
curl_setopt($chCURLOPT_COOKIEFILE"./cook1");
       
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
       
curl_setopt($chCURLOPT_RETURNTRANSFER1);
       
$result  curl_exec($ch);
       return 
$result;
    }
    
        if(
$_POST['captcha'])
    {
      
$result post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$login.'&email='.$email.'&password='.$password.'&captcha='.trim($_POST['captcha']).'&do_reg=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F','Referer: http://moemesto.ru/register/?from=button');
      
$result iconv("UTF-8","Windows-1251",$result);
       if(
preg_match('#2>П(.*?)з#i',$result,$end))
        {
          
$fh fopen($accounts"a+");
          
$success fwrite($fh$login.$divider.password."\r\n");
          
fclose($fh);
          
Header('Location: index.php');
        }
        else
        {
          echo 
'<script>alert(\'Не правильный код!\')</script>';
          echo 
'<meta http-equiv="Refresh" content="0; url=index.php">'
        }
    }
    else
    {
    
$result post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
    
preg_match('#id" value="(.*?)"#i',$result,$captchaid);
    
        echo 
'<img src="http://moemesto.ru/captcha/'.$captchaid[1].'"><br>
          <form name="captcha_form" action="index.php" method="POST">
          <input type="text" name="captcha" value="" /><br>
          <input type="hidden" name="captchaid" value="'
.$captchaid[1].'" />
             <input type="submit" value="ok">
           </form>'

    }
/* geforse.name */
?>


programming 27.08.2009 16:29

Огромное спасибо. Всё заработало! А мой код не работал как обычно по моей же не внимательности..

programming 28.08.2009 15:08

Опять появились трудности с этим скриптом..
Решил сделать ввод данных из формы:
Код:

<form action="/index.php" method="get">
Логин:<input type="text" name="login"><br>
Пароль:<input type = "text" name="password"><br>
E-mail:<input type ="text" name = "email">  <br>
<input type ="submit" value="Регистрация">
</form>

Но скрипт не видит эти переменные и считает, что их нет. Из начала скрипта я конечно убрал логин, пароль и e-mail.
В чём может быть причина?

geforse 28.08.2009 15:35

PHP код:

<form action="/index.php" method="POST"

В скрипте (index.php) вызывай так:
PHP код:

$login $_POST['login']; 


programming 28.08.2009 15:54

Да пробовал я уже так.. Вообще в скрипте почему-то нет таких переменных когда даже я методом гет передавал и в адр. строке они были прописаны.. Вообще парадокс..

geforse 28.08.2009 16:05

PHP код:

<?php
@set_time_limit(0);
//-----------------//
$accounts 'accounts.txt'// Файл для сохранения аккаунтов
$divider  ':';           // Раздеитель 
//-----------------//

       
function post($url,$post,$refer)
    {
       
$ch curl_init($url);
       
curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
       
curl_setopt($chCURLOPT_POST1);
       
curl_setopt($chCURLOPT_POSTFIELDS$post);
       
curl_setopt($chCURLOPT_REFERER$refer);
       
curl_setopt($chCURLOPT_COOKIEJAR"./cook1");
       
curl_setopt($chCURLOPT_COOKIEFILE"./cook1");
       
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
       
curl_setopt($chCURLOPT_RETURNTRANSFER1);
       
$result  curl_exec($ch);
       return 
$result;
    }
    
        if(
$_POST['captcha'])
    {
      
$result post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$_POST['login'].'&email='.$_POST['email'].'&password='.$_POST['password'].'&captcha='.trim($_POST['captcha']).'&do_reg=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F','http://moemesto.ru/register/?from=button');
      
$result iconv("UTF-8","Windows-1251",$result);
       if(
preg_match('#2>П(.*?)з#i',$result,$end))
        {
          
$fh fopen($accounts"a+");
          
$success fwrite($fhtrim($_POST['login']).$divider.trim($_POST['password'])."\r\n");
          
fclose($fh);
          
Header('Location: index.php');
        }
        else
        {
          echo 
'<script>alert(\'Не правильный код!\')</script>';
          echo 
'<meta http-equiv="Refresh" content="0; url=index.php">'
        }
    }
    else
    {
    
$result post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
    
preg_match('#id" value="(.*?)"#i',$result,$captchaid);
    
        echo 
'
          <form name="captcha_form" action="index.php" method="POST">
          Код:&nbsp;<input type="text" name="captcha" value="" />&nbsp;<img src="http://moemesto.ru/captcha/'
.$captchaid[1].'"><br><p>
          <input type="hidden" name="captchaid" value="'
.$captchaid[1].'" />
          Логин:&nbsp;<input type="text" name="login"><br><p>
          Пароль:&nbsp;<input type = "text" name="password"><br><p>
          E-mail:&nbsp;<input type ="text" name = "email"><br><p>
          <input type ="submit" value="Регистрация">
           </form>'

    }
/* geforse.name */
?>


programming 28.08.2009 16:32

:D Не ну так то понятно.. Хотелось бы всё таки с другой страницы передавать значения..

m0Hze 28.08.2009 16:40

PHP код:

<form action="./index.php" method="POST"

так что скажет?

programming 28.08.2009 16:49

Да ничего не скажет.. Это же тоже самое получается..

geforse 28.08.2009 16:51

index.html
Код HTML:

<form action="reger.php" method="post">
  Логин:  <input type="text" name="login"><br>
  Пароль: <input type = "text" name="password"><br>
  E-mail: <input type ="text" name = "email"><br>
          <input type ="submit" value="Регистрация">
</form>

reger.php
PHP код:

<?php
@set_time_limit(0);
//-----------------//
$accounts 'accounts.txt'// Файл для сохранения аккаунтов
$divider  ':';           // Раздеитель 
//-----------------//

       
function post($url,$post,$refer)
    {
       
$ch curl_init($url);
       
curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
       
curl_setopt($chCURLOPT_POST1);
       
curl_setopt($chCURLOPT_POSTFIELDS$post);
       
curl_setopt($chCURLOPT_REFERER$refer);
       
curl_setopt($chCURLOPT_COOKIEJAR"./cook1");
       
curl_setopt($chCURLOPT_COOKIEFILE"./cook1");
       
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
       
curl_setopt($chCURLOPT_RETURNTRANSFER1);
       
$result  curl_exec($ch);
       return 
$result;
    }
    
        if(
$_POST['captcha'])
    {
      
$result post('http://moemesto.ru/register/','from=button&captchaid='.$_POST['captchaid'].'&login='.$_POST['login'].'&email='.$_POST['email'].'&password='.$_POST['password'].'&captcha='.trim($_POST['captcha']).'&do_reg=%D0%97%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%D1%81%D1%8F','http://moemesto.ru/register/?from=button');
      
$result iconv("UTF-8","Windows-1251",$result);
       if(
preg_match('#2>П(.*?)з#i',$result,$end))
        {
          
$fh fopen($accounts"a+");
          
$success fwrite($fh$_POST['login'].$divider.$_POST['password']."\r\n");
          
fclose($fh);
          
Header('Location: reger.php');
        }
        else
        {
          echo 
'<script>alert(\'Не правильный код!\')</script>';
          echo 
'<meta http-equiv="Refresh" content="0; url=reger.php">'
        }
    }
    else
    {
    
$result post('http://moemesto.ru/register/',null,'http://moemesto.ru/');
    
preg_match('#id" value="(.*?)"#i',$result,$captchaid);
    
        echo 
'<img src="http://moemesto.ru/captcha/'.$captchaid[1].'"><br>
          <form name="captcha_form" action="reger.php" method="POST">
          <input type="text" name="captcha" value="" /><br>
          <input type="hidden" name="captchaid" value="'
.$captchaid[1].'" />
          <input type="hidden" name="login" value="'
.$_POST['login'].'" />
          <input type="hidden" name="password" value="'
.$_POST['password'].'" />
          <input type="hidden" name="email" value="'
.$_POST['email'].'" />
             <input type="submit" value="ok">
           </form>'

    }
/* geforse.name */
?>


programming 28.08.2009 17:01

Заработало)) Видимо нужно $_POST сразу ставить везде, а не присваивать его значение другой переменной..
Спасибо.

Не могу поставить Вам плюсик, т.к. прошлый плюс был также Вам))

m0Hze 28.08.2009 17:12

Нехачу показать глупым,но почему выше в примерах вы делали так
PHP код:

$_POST['bla']=$login

Ведь это наоборот,вы сбиваете значение $_POST['bla'], и присваиваете ему значение $login.
Шоке.

geforse 28.08.2009 17:26

Цитата:

Сообщение от m0Hze
Шоке.

Перепутал немножко :)


Цитата:

Сообщение от programming
Видимо нужно $_POST сразу ставить везде, а не присваивать его значение другой переменной..

Бред )
Я ставлю всегда сразу $_POST,т.к...нравится мне так и всё :)

Цитата:

Сообщение от b3
Это особый вид коденга.

Буду брать пример у вас, вы ведь никогда не ошибаетесь

programming 28.08.2009 17:39

Я ставил $login = $_POST['bla']..

autor 03.12.2009 16:55

Вот кому надо
http://depositfiles.com/files/ori4yly5a


Время: 16:45