Как работает этот флажок recaptcha и как его использовать?

150

Я недавно зарегистрировался на сайте oneplusone https://account.oneplus.net/sign-up и заметил этот флажок recaptcha

флажок перепросмотр

Как это работает, и как я могу использовать это на своих сайтах? Гораздо лучше, чем эти загадочные слова / цифры :)

Сайт recaptcha не упоминает ни одного нового метода recaptcha ... https://www.google.com/recaptcha/intro/index.html

Педро Майя Коста
источник
14
Я видел это в одном и том же месте и удивлялся точно так же. Я выставляю награду за привлечение внимания. Мне тоже любопытно.
Призрак Мадары
Может быть, он находится в стадии тестирования и еще не готов к выпуску?
user3791372
1
Самый простой способ сделать это - $('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');боты не будут ставить флажок, потому что это не часть формы. jsfiddle.net/s6jkchmz
TylerH
1
Существует также метод honeypot: поместить неотразимое поле ввода в форму (например, «комментарии»), а затем скрыть его с помощью css / js. Если данные присутствуют, то отправителем является бот. Я использовал это, и это работает на удивление хорошо.
Дэвид Х. Беннетт

Ответы:

30

Это бета API для reCAPTCHA. Я получил это из источника их JS API: https://www.google.com/recaptcha/api.js со ссылкой на «API2». И я также нашел это: http://jaswsinc.com/recaptcha-ads/ По-видимому, они сделали бета только для приглашения своей «нет CAPTCHA reCAPTCHA» Итак ... Вы, вероятно, не сможете заставить его работать на ваш сайт, пока. Я не могу найти какую-либо информацию о включении в бета-версию, но если вы ищете "Нет CAPTCHA reCAPTCHA бета", вы можете увидеть несколько человек, которые упомянули, что получили письмо от Google, чтобы они присоединились.

Если вы найдете место, чтобы попасть в бета-версию, пожалуйста, поделитесь! Иначе похоже, что публичный релиз выйдет в 2015 году ...

Ян М
источник
1
Вы можете попытаться что-то Франкенштейн вместе, используя gstatic.com/recaptcha/api2/r20140903161709/recaptcha__en.js, если вы ищете «g-recaptcha», «Я не робот» или «флажок», вы можете найти код, который реализуя это там.
Ян М
3
Выдержка из электронного письма:We expect to move all existing reCAPTCHA sites to the new API in 2015.
Тимоти Цорн
1
Вот сообщение в блоге Google, в котором анонсируется новая функция No CAPTCHA reCAPTCHA: googleonlinesecurity.blogspot.com/2014/12/…
Nealvs
4
Где это объясняет, как No CAPTCHA reCAPTCHAработает новый ?
Нихил Гиррадж
5
@NikhilGirraj, если вы хотите знать , как Нет CAPTCHA , рекапчи работает , я укажу вам на этот пост .
Игорь Савинкин
114

Эта запись не отвечает на первоначальный вопрос, однако она помогает реализовать подобное решение. Как сказал @IanM, флажок recaptcha находится в бета-фазе, и его нельзя использовать без приглашения.

ВАЖНОЕ РЕДАКТИРОВАНИЕ Google представил новую reCAPTCHA

Это CAPTCHA на основе JavaScript.

Поскольку большинство спам-ботов не выполняют JavaScript и не могут определить корреляцию между отображаемым текстом и DOM или необходимые действия, они не могут установить флажок.

Обратите внимание, что флажок вообще отсутствует, это просто элемент div с некоторыми стилями CSS. Спам-боты пытаются заполнить элементы ввода формы, но в CAPTCHA нет ввода. Галочка - это просто еще один div (класс css).

Когда вы нажимаете на поле, ajax-запрос уведомляет сервер о том, что div был нажат, и сервер сохраняет эту информацию во временном хранилище (помечает токен: этот токен был активирован человеком). Когда вы отправляете форму, скрытое поле отправляет активированный токен, а затем, когда сервер проверяет информацию формы, он распознает, что токен активирован. Если токен не активирован, форма будет признана недействительной.

Шаги в пунктах пули:

  • Сгенерируйте уникальный идентификатор и добавьте его в форму со скрытым вводом
  • Установите флажок на сайте (без использования <input>элемента, возможно, с использованием <div>) и добавьте к нему ранее созданный идентификатор (вы можете использовать data-*атрибуты html5 )
  • Когда пользователь нажимает на флажок, отправляет ajax-запрос на сервер и проверяет CAPTCHA, если он действителен, пометьте его как in use. (Показать результат - идентификатор в порядке / не в порядке - для пользователя)
  • Когда пользователь отправляет форму, данные формы содержат идентификатор. Проверьте еще раз, он должен существовать, и он должен быть в in useсостоянии.
  • Если все проверки пройдены, данные формы готовы к использованию / обработке

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

ПРИМЕЧАНИЕ. Этот тип CAPTCHA работает только при включенном JavaScript!

ПРИМЕЧАНИЕ (правка 1) Как было сказано в @crazypotato, есть некоторые инструменты автоматизации, которые могут выполнять JavaScript, эти инструменты также способны отправлять правильный AJAX-запрос и запускать событие Click на флажке div.

ПРИМЕЧАНИЕ (правка 2) Обратите внимание, что сценарий, написанный специально для одного сайта или для того, чтобы сломать один тип капчи, рано или поздно будет пройден. Нет предельной защиты, вы можете только заставить ботов (или их разработчиков) работать усерднее.

ПРИМЕЧАНИЕ (правка 3) Шаги и описание в этом ответе содержат только некоторые основные сведения об этом типе капчи, вам всегда нужно добавлять дополнительные проверки и шаги по обеспечению безопасности, чтобы сделать его более безопасным. Например, Google noCaptcha систематически запускает стандартную reCaptcha после 3 «div кликов».

Pred
источник
4
Я думаю, что вопрос конкретно о том, «Как включить эту функцию с Google reCAPTCHA?» Я уверен, что смогу реализовать это сам, но с их делом все не так просто.
Призрак Мадары
Если вы нажмете «Сообщить о проблеме» внизу страницы StreetView, вы получите новую рекаптчу. Вот где я впервые увидел его и нашел эту ТАКую страницу, когда пошел искать.
user2605793
1
Что помешает боту отправить этот ajax-запрос? Если бы каждый (или полу-большой сайт) внедрял CAPTCHA, подобную этой, он наверняка был бы использован в любом случае. Cloudflare имеет похожую систему обнаружения ботов, которая, кажется, работает, не требуя от пользователя никаких действий.
Стин Шютт
Прежде всего, я полностью согласен с вашим комментарием, и да, бот, написанный непосредственно для использования одного сайта, будет принят (и это верно для любого вида capthas). Я начал свой пост с most botsи нет all bots. Существуют также решения, когда основанный на изображении прерыватель капчи просто отправляет изображение программному обеспечению, а человек вводит символы (а количество сотрудников оплачивается за счет количества успешных публикаций). Как бы вы помешали этому? :)
Пред
1
@Pred "Спам-боты пытаются заполнить элементы ввода формы, но в CAPTCHA нет ввода." Это жалко. jackiechanface.jpg
crazypotato
9

Вот мой код работает без проблем в PHP:

Сторона клиента:

<div class="g-recaptcha" data-sitekey="PUBLIC_KEY"></div>

Сторона сервера:

if (isset($_POST['g-recaptcha-response'])) {
    $captcha = $_POST['g-recaptcha-response'];
    $privatekey = "SECRET_KEY";
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret' => $privatekey,
        'response' => $captcha,
        'remoteip' => $_SERVER['REMOTE_ADDR']
    );

    $curlConfig = array(
        CURLOPT_URL => $url,
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => $data
    );

    $ch = curl_init();
    curl_setopt_array($ch, $curlConfig);
    $response = curl_exec($ch);
    curl_close($ch);
}

$jsonResponse = json_decode($response);

if ($jsonResponse->success == "true")
    doSomething();
else
    doSomeOtherThing();

:)

ismaestro
источник
Вы не пропустили некоторые части клиентского / HTML-кода? просто спрашиваю, потому что в вашем PHP-коде вы проверяете по названию поста, g-recaptcha-responseно в вашем клиентском коде такой элемент не определен ... я что-то упустил?
Беноматис
5

Я пришел сюда в поисках, не увидел ответа и поэтому продолжал искать.

После моего поиска это окно все еще было открыто, поэтому я обновляю этот пост своими результатами.

Здесь вы можете узнать о reCAPTCHA :

http://scraping.pro/no-captcha-recaptcha-challenge/

По сути, вы добавляете это на свою веб-страницу:

<script src="https://www.google.com/recaptcha/api.js" >;
<form method="post">
    <div class="g-recaptcha" data-sitekey="[site key issued by google]"></div>
    <input value="submit" type="submit" />
</form>

Чтобы получить ключи reCAPTCHA , перейдите на этот сайт Google:

https://www.google.com/recaptcha/intro/index.html

Получив ключи по указанной выше ссылке, вы можете углубиться в кодирование этого, используя следующую информацию Google:

https://developers.google.com/recaptcha/

НОТА:

Из документации Google:

Скрипт должен быть загружен с использованием протокола HTTPS и может быть включен из любой точки на странице без ограничений.

Вот пример того, как я заставил это работать:

<html>
<head>
    <title>Contact</title>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    <script>
    var onloadCallback = function () {
        grecaptcha.render('dvCaptcha', {
            'sitekey': '<%=ReCaptcha_Key %>',
            'callback': function (response) {
                $.ajax({
                    type: "POST",
                    url: "CS.aspx/VerifyCaptcha",
                    data: "{response: '" + response + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (r) {
                        var captchaResponse = jQuery.parseJSON(r.d);
                        if (captchaResponse.success) {
                            $("[id*=txtCaptcha]").val(captchaResponse.success);
                            $("[id*=lblAlarm]").hide();
                        } else {
                            $("[id*=txtCaptcha]").val("");
                            $("[id*=lblAlarm]").show();
                            var error = captchaResponse["error-codes"][0];
                            $("[id*=lblAlarm]").html("RECaptcha error. " + error);
                        }
                    }
                });
            }
        });
    };
    </script>
</head>
<body>
    <form action="?" method="POST">
        <div id="dvCaptcha" class="g-recaptcha" data-sitekey="[site key issued by google]"></div>
        <br />
        <asp:Button ID="btnSubmit" runat="Server" Text="Send" OnClick="btnSubmit_Click" />
        <asp:Label ID="lblAlarm" runat="server" ForeColor="Red"></asp:Label>
    </form>
</body>
</html>

Если вам нужно проверить в выделенном коде ASP.NET, просто убедитесь, что элемент управления "g-recaptcha-response" заполнен:

protected static string ReCaptcha_Key, ReCaptcha_Secret;

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(Request.Form["g-recaptcha-response"]))
    {
        // other code
    } else
    {
       lblAlarm.Text = "reCAPTCHA failed.";
    }
}

Надеюсь, некоторые из вас найдут это полезным.

jp2code
источник
3

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

Я не смог найти его реализацию в .net, поэтому создал простой элемент управления веб-формами, который вы можете найти здесь https://github.com/pnmcosta/recaptchav2dotnet

Педро Майя Коста
источник