Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Установка ReCaptcha на PHP страницу

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

SkyAn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть форма регистрации написанная на PHP. На нее лезет много ботов. Решил их отфильтровать с помощью ReCaptcha от Google. Сделал все по их инструкции, каптча появилась, но она не реагирует на правильность вводимых. То есть регистрация происходит все время. При этом происходит перенаправление на другую страницу. Но меня интересует, чтоб проверка проходила на той же странице и при неправильной каптча выводило сообщение и не сбрасывало форму. поделитесь идеями как это сделать.

Всего записей: 132 | Зарегистр. 07-03-2007 | Отправлено: 16:23 05-01-2012 | Исправлено: Cheery, 22:24 05-01-2012
Nagolder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну это только когда экстрасенсы из отпуска вернутся...
 
А если хотите, чтоб раньше что-то произошло - то ссылку на страницу дайте, где весь этот ужас происходит

Всего записей: 120 | Зарегистр. 24-09-2006 | Отправлено: 16:57 05-01-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SkyAn

Цитата:
То есть регистрация происходит все время. При этом происходит перенаправление на другую страницу. Но меня интересует, чтоб проверка проходила на той же странице и при неправильной каптча выводило сообщение и не сбрасывало форму. поделитесь идеями как это сделать

код показывайте.
там ничего вообще сложного нет

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:23 05-01-2012
SkyAn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
я нашел как сделать все в одно файле и оно прекрасно работает в том файле. пытаюсь перенести в свою тестовую старицу без формы, мне все время выдает "The reCAPTCHA failed with this message: incorrect-captcha-sol Please try again." не зависимо от заполнения. Как понимаю при загрузке страницы приходящее значение не пустое как должно быть. при попытке очистить, чистится форма и все значения которые вводятся.

Всего записей: 132 | Зарегистр. 07-03-2007 | Отправлено: 17:18 06-01-2012
Nagolder

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ссылку на страницу дайте


Цитата:
код показывайте.


Всего записей: 120 | Зарегистр. 24-09-2006 | Отправлено: 18:57 06-01-2012
SkyAn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
вот файл regist.php

Всего записей: 132 | Зарегистр. 07-03-2007 | Отправлено: 16:45 10-01-2012 | Исправлено: SkyAn, 16:52 10-01-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SkyAn
А с чего он должен проверять когда вы его вставили таким образом то??  
Все то, что делается в браузере, подделывается и вы не можете доверять данным.  
А у вас в php даже проверки нет - вот как надо использовать
http://code.google.com/apis/recaptcha/docs/php.html
 
а так - вы же не думаете, что проверка идет автоматически даже в вашем случае?  
читайте
http://code.google.com/apis/recaptcha/docs/verify.html
 
но без php я бы вообще стал полагаться на такую форму, потому что ботам пофиг тогда есть ли капча или нет - они просто собирают элементы формы и формируют запрос как от браузера.
при этом, конечно, можно сделать кое какой "финт ушами" и добавить с помощью js невидимое поле, к примеру, которого нет изначально в форме. А уже на основе наличия его оценивать - бот это или человек.
 
правда если кто то захочет поспамить и настроит своего бота именно под вашу форму, проанализировав отправляемое на сервер содержимое, то может обойти такую "защиту".
 
вот и пользуйтесь PHP API для создания формы и проверки кода из нее
 
ps: есть и другие способы защиты (об изменении формы с помощью js я уже сказал)
Защита форм от роботов (скрипт)

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:02 10-01-2012 | Исправлено: Cheery, 22:57 10-01-2012
SkyAn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
А у вас в php даже проверки нет - вот как надо использовать
http://code.google.com/apis/recaptcha/docs/php.html

Я пробовал прикрутить и такой код. Все равно не срабатывала капча. А если пробую поставить его не странице без формы. Ну чтоб проверить правильность установки, все время выдает ошибку "The reCAPTCHA wasn't entered correctly. Go back and try it again."
Нашел ссылку на демо капчу. Хочу настроить ее именно так, но не получается.

Всего записей: 132 | Зарегистр. 07-03-2007 | Отправлено: 14:13 11-01-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SkyAn

Цитата:
Я пробовал прикрутить и такой код. Все равно не срабатывала капча

а у меня работает, поэтому и говорю - показывайте код. я реализовал так, как у них показано.

Цитата:
А если пробую поставить его не странице без формы

без формы данные отправляться не будут, если только с помощью ajax

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:28 11-01-2012
SkyAn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот я попытался вставить тот код из демо для капчи regist.php

Всего записей: 132 | Зарегистр. 07-03-2007 | Отправлено: 16:41 12-01-2012 | Исправлено: SkyAn, 18:44 12-01-2012
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SkyAn
а если думать??  
зачем вы проверку правильности делаете в месте, где выводится форма, а не там, где работаете с данными из формы??
проверку нужно делать сразу после  

Код:
if (isset($_POST['from_registration']) and $_POST['from_registration'] == "from_registration") {

и если она не проходит, тогда и выдавать сообщение об ошибке

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:22 12-01-2012
SkyAn



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
все равно у меня не очень получается заставить работать проверку. каптча отображается, но не выполняет свою функцию. я понимаю, что на более простой регистрации я б вставил ее без проблем. но этот сайт мне достался по наследству.
может можешь подправит этот код и сбросить мне, потому что я не знаю уже что делать

Всего записей: 132 | Зарегистр. 07-03-2007 | Отправлено: 16:31 14-03-2012
TemaZosin

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите мне прикрепить капчу, плз. Если что сайт cutmylink.gq (редирект отключил сейчас после сокращения).
 
https://yadi.sk/d/MFO7LuOHibaBs

Всего записей: 512 | Зарегистр. 30-08-2012 | Отправлено: 20:52 22-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TemaZosin
а сами что пробовали сделать?
вот же пример - https://github.com/google/recaptcha/blob/master/examples/example-captcha.php

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 21:22 22-08-2015
TemaZosin

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
пробовал, боты все равно засерают как-то. у меня проблема с тем, чтобы кнопка "сократить" в моем срипте, сначала проверила каптчу, а после уже сокращала.

Всего записей: 512 | Зарегистр. 30-08-2012 | Отправлено: 04:11 23-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TemaZosin
ну так покажите как пробовали, проще найти проблемное место.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 06:05 23-08-2015
bigorv1967

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите прикрутить новую Капчу от Гугл (с картинками) на форму отправки поста в форуме (PunBB). Я в PHP программировании понимаю не очень. По рекомендациям Google добавил в файл post.php, который выводит форму для отправки сообщения в форум строки:
 

Код:
<script src='https://www.google.com/recaptcha/api.js'></script>

и

Код:
<div class="g-recaptcha" data-sitekey="мой ключ, который выдал Гугл при регистрации"></div>

 
Кусок кода в который я это вставил выглядит так:

Код:
<div class="blockform">
    <h2><span><?php echo $action ?></span></h2>
    <div class="box">
        <script src='https://www.google.com/recaptcha/api.js'></script>
        
        <?php echo $form."\n" ?>   //В переменной $form видимо записана сама форма отправки?
            <div class="inform">
            <br><div float="left">Пожалуйста, перед отправкой сообщения, ответьте на вопрос Капчи.<br>  
Нужно щелкнуть мышью по квадратику "Я не робот" и правильно выбрать картинки.<br>
Это необходимо для исключения СПАМА.</div><br>
            <div class="g-recaptcha" data-sitekey="ну, здесь мой ключ от Гугла" data-theme="dark"></div><br>
    

 
Капча выводится в форме, работает нормально, ставит галочку, если все картинки указаны правильно. Теперь мне нужно добавить обработку при отправке поста . То есть при нажатии кнопки "Отправить" сначала проверить - пройдена ли проверка Капчи. Я вроде нашел в этом же файле (post.php) обработку нажатия кнопки "Отправить" - вот ее начало:

Код:
 
 
// Did someone just hit "Submit" or "Preview"?
if (isset($_POST['form_sent']))
    
{    
        //Видимо вот здесь в самом начале надо вставить проверку - пройдена ли Капча и если нет, сделать die или  exit() c выводом сообщения: "Пройдите Капчу!"
    
    // Make sure form_user is correct
    if (($pun_user['is_guest'] && $_POST['form_user'] != 'Guest') || (!$pun_user['is_guest'] && $_POST['form_user'] != $pun_user['username']))
        message($lang_common['Bad request']);
        
    // Flood protection
    if (!$pun_user['is_guest'] && !isset($_POST['preview']) && $pun_user['last_post'] != '' && (time() - $pun_user['last_post']) < $pun_user['g_post_flood'])
        $errors[] = $lang_post['Flood start'].' '.$pun_user['g_post_flood'].' '.$lang_post['flood end'];
 
    // If it's a new topic
    if ($fid)
    {
        $subject = pun_trim($_POST['req_subject']);
 
        if ($subject == '')
            $errors[] = $lang_post['No subject'];
        else if (pun_strlen($subject) > 70)
            $errors[] = $lang_post['Too long subject'];
        else if ($pun_config['p_subject_all_caps'] == '0' && pun_strtoupper($subject) == $subject && $pun_user['g_id'] > PUN_MOD)
            $subject = ucwords(pun_strtolower($subject));
    }
 
    // If the user is logged in we get the username and e-mail from $pun_user
    if (!$pun_user['is_guest'])
    {
        $username = $pun_user['username'];
        $email = $pun_user['email'];
    }
    // Otherwise it should be in $_POST
    else
 
// Ну и дальнейший код наверное не важен
 

 
Помогите мне написать код проверки валидности Капчи. То есть надо отправить пост-запрос в гугл, получить ответ и обработать его с продолжением выполнения последующего кода или с остановкой скрипта и вывода сообщения: "пройдите Капчу!"

Всего записей: 3 | Зарегистр. 03-09-2014 | Отправлено: 15:55 03-12-2015 | Исправлено: bigorv1967, 16:09 03-12-2015
K S

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bigorv1967
Пример из руководства. Достаточно наглядный и понятный. Скачайте, разберите.

Всего записей: 236 | Зарегистр. 15-11-2015 | Отправлено: 16:13 03-12-2015
bigorv1967

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разобрать то, что там написано, мне пока знаний не хватает.  
 
Капчу на форму я вывел, она работает.
Как мне при нажатии на кнопку "Submit" передать в POST запросе параметр "g-recaptcha-response" - где мне его взять?  
 
Написал Post запрос с помощью cURL так:

Код:
 
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $ch = curl_init(); // инициализируем сессию curl
    curl_setopt($ch, CURLOPT_URL, $url); // указываем URL, куда отправлять POST-запрос
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// разрешаем перенаправление
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // указываем, что результат запроса следует передать в переменную, а не вывести на экран
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); // таймаут соединения
    curl_setopt($ch, CURLOPT_POST, 1); // указываем, что данные надо передать именно методом POST
 

Дальше нужно подставить параметы: это "секретный ключ" (он у меня есть) и "g-recaptcha-response" - А ВОТ ЭТО Я НЕ ПОНИМАЮ, ГДЕ ВЗЯТЬ!!!
 
То есть, дальше я должен выставить параметры Post запроса:

Код:
 
    curl_setopt($ch, CURLOPT_POSTFIELDS, "secret=Мой секретный ключ&response="g-recaptcha-response");  
 

Подскажите, ради бога, как и где я должен получить эту "g-recaptcha-response"?
 
И дальше, правильно ли я понимаю, когда я выполню запрос:

Код:
     
$result = curl_exec($ch);  
сurl_close($ch);
$response = json_encode($result);
 

в переменной Response у меня будет массив, возвращенный Гуглом и я смогу проверить и обработать статус Капчи так:

Код:
 
if ($response['success'] = false)
   die ('Пройдите Капчу!");
 

 
 

Всего записей: 3 | Зарегистр. 03-09-2014 | Отправлено: 03:08 04-12-2015
K S

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...
bigorv1967

Цитата:
Разобрать то, что там написано, мне пока знаний не хватает

А знаний там особых и не нужно. Там всё уже написано, надо только вставить:
 

Код:
 
if (isset($_POST['g-recaptcha-response'])):
    // The POST data here is unfiltered because this is an example.
    // In production, *always* sanitise and validate your input'
    ?>
    <h2><tt>POST</tt> data</h2>
    <tt><pre><?php var_export($_POST); ?></pre></tt>
    <?php
// If the form submission includes the "g-captcha-response" field
// Create an instance of the service using your secret
    $recaptcha = new \ReCaptcha\ReCaptcha($secret);
 
// If file_get_contents() is locked down on your PHP installation to disallow
// its use with URLs, then you can use the alternative request method instead.
// This makes use of fsockopen() instead.
//  $recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\SocketPost());
 
// Make the call to verify the response and also pass the user's IP address
    $resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
 
    if ($resp->isSuccess()):
// If the response is a success, that's it!
        ?>
        <h2>Success!</h2>
        <p>That's it. Everything is working. Go integrate this into your real project.</p>
        <p><a href="/">Try again</a></p>
        <?php
    else:
// If it's not successful, then one or more error codes will be returned.
        ?>
        <h2>Something went wrong</h2>
        <p>The following error was returned: <?php
            foreach ($resp->getErrorCodes() as $code) {
                echo '<tt>' , $code , '</tt> ';
            }
            ?></p>
        <p>Check the error code reference at <tt><a href="https://developers.google.com/recaptcha/docs/verify#error-code-reference">https://developers.google.com/recaptcha/docs/verify#error-code-reference</a></tt>.
        <p><strong>Note:</strong> Error code <tt>missing-input-response</tt> may mean the user just didn't complete the reCAPTCHA.</p>
        <p><a href="/">Try again</a></p>
    <?php
    endif;
 

 
И не забыть классы из примера подключить.
Подробнее...

Всего записей: 236 | Зарегистр. 15-11-2015 | Отправлено: 08:14 04-12-2015 | Исправлено: K S, 08:15 04-12-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Установка ReCaptcha на PHP страницу


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru