Вышла новая версия reCaptcha API 2.0

    На днях, занимаясь очередным внедрением reCaptcha для одного из проектов, столкнувшись с небольшой проблемой в области отображения нескольких защитных изображений на 1 странице с помощью AJAX я в очередной раз пошел на страницу официальной документации «reCaptcha» и обнаружил, что документация существенно отличается от предыдущих версий.
    Воспользовавшись поиском стало ясным — в мир вышла «recaptcha 2.0» с обновленным API и визуализацией а так же рядом других «плюшек», о чем я и расскажу в данной статье.

    В Новой версии reCaptcha, или как ее теперь следует называть «gCaptcha» существенным изменениям подверглись визуальный интерфейс капчи для веб-приложений и алгоритм взаимодействия с сервисом валидации (API). Сами «защитные изображения» существенно (визуально) не изменились.
    В данный момент так же нет (мне не удалось найти) информации об «официальном релизе» reCaptcha2, а на посадочной страничке проекта весит гордый "coming soon".

    Новый интерфейс reCaptcha 2


    Одним из существенных изменений, на который мы наталкиваемся практически сразу при ознакомлении с reCaptcha2 является новый интерфейс оформления защитного изображения.
    Интерфейс был существенно переработан — теперь он отображается в виде небольшого виджета с импровизируемым чекбоксом «я не робот», при клике на котором пользователю предлагается разгадать изображение.

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

    В случае неудачного разгадывания изображения капча уведомит об этом, что является существенным улучшением — пользователю не нужно будет перезагружать страницу несколько раз. Капча так же уведомит о неудаче в случае истекания время сессии.
    Посмотреть reCaptcha2 можно в живую на демо-страничке от гугла.

    Новый API


    Вместе с новым интерфейсом reCaptcha2 для взаимодействия используется и новый алгоритм внедрения и взаимодействия с удаленным API.
    Ключи для использования reCaptcha2 на ваших сайтах можно получить в новом интерфейсе (требуется авторизация google):

    Все так же используется алгоритм приватного и публичного ключа, которые в данной версии названы как «секретный ключ» и «ключ» соответственно. Существенным изменением является то, что ключ в reCaptcha2 не может быть глобальным — теперь каждый домен, на котором планируется использовать reCaptcha2 должен быть указан в настройках. Для localhost и 127.0.0.1 капча будет работать без указания домена.
    С новым api внедрить капчу в тело страницы — дело 2х строк кода(*пример простого внедрения):
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    <div class="g-recaptcha" data-sitekey="your_site_key"></div>
    

    Несмотря на это, api обладает достаточно большим набором функций для различных вариаций выгрузки reCaptcha2 и настройки ее визуализации(отображение по callback'у, стилизация и другие).
    Изменился и API для валидации взаимодействия пользователя с капчей. Сразу хочу отметить, что ранее используемый стандартный post field — recaptcha_response_field теперь именуется как g-recaptcha-response. Сам API теперь возвращает результат проверки в формате JSON, что собственно не может не радовать. Запрос на валидацию при submit`e формы с капчей должен выглядеть следующим образом:
    www.google.com/recaptcha/api/siteverify?secret=your_secret&response=response_string&remoteip=user_ip_address

    где соответственно secret — приватный ключ (секретный ключ), response — результат ответа пользователя (post.g-recaptcha-response), remoteip — ип-адрес пользователя (не обязателен). Результат обработки на данном URL будет возвращен в JSON формате:
    {
      "success": true|false,
      "error-codes": [...]
    }
    

    в результате чего, валидация капчи будет выполнена в 1 строку (json_decode; object->success).
    Документация: смотреть на google

    Другие «Futures»


    Помимо всего выше описанного в личном кабинете reCaptcha2 видны «заготовки» статистики, которые позже позволят вам анализировать поведение ваших пользователей, связанное с разгадыванием капчи. Так же доступны статистические данные об «индексе спама» и прочих рюшечках, мне пока не ясно для чего они предназначены(видимо для уведомления о повышении/понижении тенденции с количеством разгадываний капч на сайте).
    В reCaptcha2 так же сохранены алгоритмы для людей с ограниченными возможностями — доступно проигрывание капчи и скачивание mp3.

    Ссылки по теме:


    П.с. — для собратьев, увлекающихся php прикреплю ссылку на готовую библиотеку по упрощенному(хотя — куда уже легче то?) использованию reCaptcha2: github/google
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 35
      +6
      На демо-страничке на показало картинку, сразу сказало, что не робот и поставило зеленую галочку. Никогда не любил разгадывать reCaptcha, а если теперь и не нужно – супер!
        0
        То же самое. Но при открытии страницы в приватном окне, показывает каптчу.
        Видимо залогиненым пользователям доказывать свою принадлежность к разумным — не требуется (=
          +1
          И у меня также. И не только на демо-страничке. Такая капча используется на humblebundle.com
            0
            Похоже на то, в порнорежиме всегда выдаёт второй этап проверки.
            +5
            Да, по всей видимости есть какой-то алгоритм анализа «уровня доверия» к пользователю, авторизованному в гугле.
              +2
              По-моему смотрится общий процент успеха, все мы там были.
                +3
                Вероятно, старая версия как раз в таком случае выдавала упрощенную капчу из цифр (номера домов)
              +3
              Уже как месяц (если не больше) вижу ее на некоторых сайтах.
              Они, видимо, и алгоритмы подкрутили: иногда показывает капчу, иногда достаточно кликнуть чекбокс.
                +3
                Судя по всему, пользователь авторизованный в гугле, считается человеком по умолчанию)
                  0
                  По тому, что мне удалось «раскопать» о дате релиза — он был где-то в ноябре (странички документации созданы/редактированы в середине ноября, на гитхабе php библиотека опубликована неделю назад).
                    +1
                    Коломбо, ты ли это?
                  –2
                  Если не робот, то кто еще может быть? НЛО?
                    0
                    Я проанализировал ваш вопрос, и после нескольких часов мозгового штурма вместе с командой экспертов, могу предложить вариант ответа: «В вопросе предполагается, что если форму заполняет не робот(скрипт или программа), скорее всего это человек.»
                    –1
                    А как у неё с вежливой деградацией? Или нет яваскрипта нет капчи?
                      +1
                      В документаций есть вариант, когда нужна капча на странице с отсутствием javascript.
                      –4
                      Может я особенный, но уже 2 недели её юзаю в одном из проектов. Новость-то какая!
                        +5
                        Все верно, релиз был где то в ноябре, выше я об этом говорил. Попросту подобной новости не было в просторах интернета, в том числе на хабре и я решил опубликовать материал, который может быть(по моему мнению) полезным для многих кто не знал об этом.
                          –6
                          Может я опять же не в теме, но может подобного рода новости лучше публиковать на Geektimes?
                            +5
                            Ну, не соглашусь. Все-таки это библиотека для разработчиков.
                              +5
                              reCaptcha ведь имеет прямое отношение к веб-разработке и к информационной безопасности(защита от спама, к сожалению у меня нет 5 рейтинга для публикации в хаб Спам/Антиспам) поэтому публикация вполне соответствует тематике ресурса.
                                  0
                                  Обратите внимание на даты.
                                    0
                                    Это все понятно. Я хотел этим сказать, что контент будет дублироваться.
                                      +1
                                      Это неизбежно ;) Но даже в данном случае 2 материала — абсолютно разные: на гиктаймсе статья более информационно-направленная, здесь — связана с разработкой, что вполне даже хорошо.
                          0
                          Кто нибудь уже пробовал на одностраничных приложениях?
                            +1
                            какие-то могут быть проблемы?
                            0
                            Сначала думали что grecaptcha.reset не правильно работает.
                            Но потом попробовали по другому и багов не осталось.

                            Была проблема если при переходе между страницами, грузить каждый раз скрипт каптчи.
                            Возникает проблема «Placeholder must be empty»
                              0
                              Натыкался на эту проблему тоже — она возникает когда на 1 странице есть 2 или более капчи и каждая пытается подтянуть гугловский js по калбеку или без него. Подобное так же возникает если попробовать выгрузить капчу по AJAX без использования калбэк-метода.
                              0
                              Веселая шутка — разместить исходники на гитхабе… уже и у меня заблокировали
                                0
                                Исходники библиотеки для php опубликовали сами google, да и способов обойти блокировку — более сотни…
                                  0
                                  Да я понимаю… меня сам факт расстраивает
                                0
                                Интересно как быстро её обойдут. Хотелось бы посмотреть на результат обхода. Чем сложнее все эти системы тем больше шанс, что найдутся умельцы которые смогут легко обойти защиту.
                                  0
                                  Мне кажется они не усложнили жизнь ботам, а упростили ее для людей.
                                    –1
                                    Да, действительно, посмотрел — капча сложнее не стала, правда многие кулхацкеры надолго не будут знать как её обойти, пока не сольют в сеть чей-нибудь код. В целом капча стала удобной и вполне удачной, посмотрим, что будет дальше.
                                  0
                                  Теперь каждый домен, на котором планируется использовать reCaptcha2 должен быть указан в настройках

                                  Хоть и прошло более года после опубликования статьи, но тем не менее пришлось адаптировать gRecaptcha для мультидоменной капчи
                                  Не знаю, появилось ли это со времени опубликования статьи или уже было ранее
                                  В общем подробности тут developers.google.com/recaptcha/docs/secure_token
                                  Генерацию sToken пришлось переделать на PHP с примера на Java
                                  Нигде по интернету не нашел, потому оставлю здесь, может кому понадобится

                                  Код на PHP
                                      function grecaptcha_stoken($grecaptcha_skey) {
                                          
                                          $token_json = json_encode([
                                              'session_id' => time(),
                                              'ts_ms'      => round(microtime(true) * 1000),
                                          ]);
                                          
                                          $token_pad = 16 - strlen($token_json) % 16;
                                          
                                          $s_token = $token_json . str_repeat(chr($token_pad), $token_pad);
                                          $s_key   = substr(hash('sha1', $grecaptcha_skey, true), 0, 16);
                                          
                                          $stoken_crypt = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $s_key, $s_token, MCRYPT_MODE_ECB));
                                          $stoken_crypt = str_replace('+', '-', $stoken_crypt);
                                          $stoken_crypt = str_replace('/', '_', $stoken_crypt);
                                          
                                          return $stoken_crypt;
                                          
                                      }
                                  
                                  


                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое