recaptcha ключ сайта что это
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как добавить на сайт reCAPTCHA v3 для защиты от парсинга и спама
В этой заметке я покажу примеры кода для интеграции reCAPTCHA v3 на сайт для защиты от просмотра страницы ботами (парсинг), для защиты от автоматических действий на сайте и блокировки спама.
Документация по интеграции reCAPTCHA v3 на сайт довольно скудная и запутанная. Я пошагово покажу пример добавления reCAPTCHA v3 на сайт и объясню используемый код (PHP и JavaScript) чтобы при необходимости вы могли внести нужные вам изменения.
Причём поскольку я тоже (как и большинство других веб-мастеров) интегрирую reCAPTCHA v3 в уже готовый проект с обширным исходным кодом, то я для себя выбрал подход минимального вмешательства в уже существующий код веб-сайта. К примеру, при добавлении reCAPTCHA v3 для проверки сделанных запросов из форм, исходный код форм вообще не будет меняться — будет вставлен небольшой фрагмент JavaScript кода, добавляющий прослушивание событий и внесение необходимых изменений «на лету».
Google reCAPTCHA v3 отличается от предыдущей версии (которая по-прежнему доступна для использования) reCAPTCHA v2 тем, что от пользователя не требуется абсолютно никаких действий. То есть проверка проходит автоматически и незаметно. Благодаря такому подходу кроме привычно интеграции в формы (для отправки комментариев, обратной связи, доступа к сервису) reCAPTCHA v3 можно использовать и для защиты просмотра страниц от ботов.
Имеется ввиду следующий ситуация: пользователь запрашивает страницу, но перед показом выполняется проверка — не является ли этот пользователь ботом. Если пользователь не является человеком, то запрещаем ему показ страницы. Такой вариант, в принципе, можно реализовать и с reCAPTCHA v2, но можно быть уверенным, что увидев капчу для просмотра страницы (даже если нужно всего лишь один раз кликнуть мышкой), очень многие пользователи просто закроют вкладку браузера. Google reCAPTCHA v3 лишена этого недостатка, поскольку пользователю ничего не показывается и от него не требуются никаких действий.
Какие последствия блокировки доступа ботам к сайту
Хотя описанная ниже техника блокировки доступа к сайту всех ботов эффективно помогает предотвратить парсинг сайтов при полной незаметности нормальным пользователям, полная блокировка ботов имеет очень важные последствия. Поэтому рассмотрим что нужно помнить при блокировке доступа ботов к сайту.
Во-первых, описанная техника заблокирует не только плохих ботов, но и хороших — таких как поисковых обходчиков от Google и Yandex. Это приведёт к тому, что если не будут предприняты дополнительные меры (например, разрешение доступа к сайту с IP принадлежащим Google и Yandex в обход капчи), то в конце концов сайт выпадет из индекса поисковых систем.
Во-вторых, некоторыми партнёрскими программами запрещено показывать рекламу на страницах, для которых закрыт доступ ботов (таких ботов как Mediapartners-Google и AdsBot-Google* для Google AdSense и YandexDirect для Рекламной Сети Яндекса). Если на защищаемом сайте показывается реклама, то нужно обеспечить доступ к страницам в обход капчи — поскольку эти роботы сами по себе не способны пройти тест «на человека».
При этом проверка качества ботов для доступа в обход капчи ни в коем случае не должна основываться только на User Agent клиента, поскольку его можно легко подменить.
По причине такого важного влияния блокировки доступа ботам, в этой статье рассмотрено два варианта блокировки:
Вы сможете выбрать наиболее подходящий для вас. Либо сочетать оба приёма: полную блокировку доступа настроить, например, для страниц авторизации, и обычную блокировку — на страницах обратной связи, формах комментирования и т.д.
Где получить ключи Google reCAPTCHA v3
Использование reCAPTCHA v3 является бесплатным. Вам достаточно указать домен и выбрать reCAPTCHA v3 или v2. В этой инструкции я буду рассматривать третью версию.
Кстати, там так интересно написано:
Вы обязуетесь уведомлять посетителей сайта о наличии проверки reCAPTCHA v3, а также о том, что им необходимо соблюдать Политику конфиденциальности и Условия использования Google. Эту систему можно применять только для борьбы со спамом и другими нарушениями. Ее запрещено использовать в других целях, например для определения кредитоспособности, работоспособности, финансового статуса или страховых возможностей.
Очень бы хотелось узнать, как с помощью reCAPTCHA v3 можно определять работоспособность и финансовый статус.
Впоследствии просматривать статистику, а также получить доступ к настройкам вы сможете со страницы https://www.google.com/recaptcha/admin.
Принципы работы reCAPTCHA v3
Первоначальный этап оценки пользователя (бот или человек) осуществляется исключительно средствами JavaScript. То есть боты без поддержки JavaScript отсеиваются уже на этом этапе. Кстати, видимо, в статистику запросов эти боты также не попадают.
Во время своей работы reCAPTCHA v3 собирает данные о взаимодействии с сайтом и формирует длинную строку — токен.
Этот токен нужно передать на сервер, обслуживающий сайт, и уже сервер с применением секретного ключа должен сделать запрос к сервису reCAPTCHA v3. Ответ будет иметь вероятностный характер — будет прислано число в диапазоне от 0 (бот) до 1 (человек). Вам самим нужно решить, какой порог является проходным для данного сайта.
Исходя из этой информации сервер должен принять решение — обрабатывать ли полученный от пользователя запрос (например, показать ли ему страницу, принять ли присланные из формы данные и т.д.).
Пример на PHP для включения reCAPTCHA v3
Мой вариант реализации состоит из двух фрагментов PHP кода. Первый лучше расположить в начале файла. Второй фрагмент нужно расположить так, чтобы выводимый им HTML находился ближе к концу исходного кода вашего сайта. Причём вам необязательно делать это с помощью PHP — вы можете вставить этот фрагмент другим образом — только в этом случае обратите внимание, что там экранированы одинарные кавычки — не забудьте отменить экранирование (убрать обратные слэши).
Прежде чем показать код (в который я также вставил много комментариев), начну с объяснения принципа работы. В самом начале делается проверка — есть ли у пользователя токен. Если нет, то вместо показа пользователю страницы сайта, выводится HTML/JavaScript код, который только получает токен и сразу же возвращает пользователя на индексную страницу (все GET запросы сохраняются, но к ним добавляется ещё одна переменная — token).
Затем вновь проверяется — есть ли у пользователя токен, если уже есть, то делается запрос к сервису reCAPTCHA v3. Если ответ положительный (это человек), то код завершает свою работу — передаётся управление основному коду сайта. Если ответ отрицательный (это бот), то код обрывает последующую обработку этого запроса — то есть немедленно останавливает работу и не передаёт управление основному коду сайта.
Первый фрагмент кода отвечает и за проверку ботов при доступе к сайту, и за проверку ботов при отправке форм.
Обратите внимание на переменные:
Первая включает проверку при доступе к страницам (по умолчанию отключено), вторая — проверку при отправке формы. Установите значения на нужную вам конфигурацию (они работают независимо друг от друга).
Этот код нужен только если включена проверка ботов при отправке форм. Значение этого кода в том, что перед каждой отправкой формы к ней добавляется токен. Сам токен получается при отправке формы — при этом между нажатием на кнопку «Отправить» и самой отправкой не происходит дополнительной задержки.
Это чистый JavaScript без использования jQuery. Обратите внимание, как я обращаюсь к форме:
Дело в том, что у меня формы без имени и без идентификатора. Причём уникальная форма на каждой странице сайта, которых больше сотни. Благо на каждой странице форма только одна, поэтому я обращаюсь к ней по порядковому номеру. Вы можете отредактировать это под свои условия.
Не забудьте установить свои собственные ключи:
Официальная документация Google reCAPTCHA v3
Официальную информацию и инструкции вы найдёте на страницах:
Как это часто бывает с официальной документацией — на её основе невозможно ничего понять и невозможно что-либо настроить до рабочего состояния…
Самую важную информацию о реализации reCAPTCHA я позаимствовал из этой статьи:
При этом та инструкция содержит критическую логическую ошибку — для принятия решения используется присланное поле success. Но дело в том, что данное поле только говорит о том, являлся ли присланный токен верным токеном для данного сайта — о том, бот это или не бот, данное поле никак не сообщает. Настоящее значение, на которое нужно ориентироваться, это score. О нём чуть позже. То есть если в своей проверке использовать success, то даже явные боты, которые, может быть, набрали 0 очков, но которые сумели просто получить токен, будут успешно проходить проверку.
Тем не менее официальная документация имеет несколько познавательных фактов о reCAPTCHA — рассмотрим их.
Во-первых, там написано, что результат проверки с сервиса reCAPTCHA возвращается в виде объекта JSON. После конвертации в массив он имеет примерно такой вид:
Значение полей следующее:
reCAPTCHA v3 без взаимодействия с пользователем возвращает очки для каждого запроса. Эти очки основываются на взаимодействиях с вашим сайтом и дают вам возможность принять решение на их основе.
Ограничения токена
Каждый токен ответа пользователя reCAPTCHA является действительным в течении двух минут и может быть верифицирован только один раз (для предотвращения атак повторного воспроизведения (replay attacks)). Если вам нужен новый токен, то перезапустите верификацию reCAPTCHA.
После того, как вы получили токен ответа, вам нужно используя соответствующие API верифицировать его в течении двух минут с reCAPTCHA, чтобы убедиться, что он является действительным.
Размещение на вашем сайте
reCAPTCHA v3 никогда не будет прерывать ваших пользователей, поэтому вы можете запускать её когда хотите без негативных влияний. reCAPTCHA работает лучше когда она имеет большего всего контекста о взаимодействиях с вашим сайтом, что помогает видеть как легитимных, так и нарушающих условия пользователей. По этим причинам рекомендуется включать проверку reCAPTCHA на формах или действиях, а также в фоне страниц для анализа.
Примечание: вы можете выполнять reCAPTCHA так много раз, как вам хочется с различными действиями на той же странице.
Интерпретация очков
reCAPTCHA v3 возвращает очки (1.0 очень вероятно хорошее взаимодействие, 0.0 весьма вероятно бот). Основываясь на этих очках, вы можете предпринять различные действия в контексте вашего сайта. Каждый сайт отличается от других, но ниже несколько примеров, как сайты используют очки. Как примеры ниже, для лучшей защиты своего сайта выполняйте действия «за сценой» вместо блокировки трафика.
Случай использования | Рекомендация |
---|---|
homepage | Наблюдайте за полной картиной в вашей панели администратора: сколько из пришедших это пользователи, а сколько разного рода парсеры |
login | При низком показатели очков, требуйте 2-факторную аутентификацию или верификацию по почте для предотвращения атака связанных с учётными данными |
social | Отправляйте комментарии от пользователей с подозрением на ботов на модерацию, ограничьте для них количество безответных запросов в друзья |
e-commerce | Давайте приоритет реальным покупателям и выявляйте запросы, которые могут оказаться ненастоящими |
reCAPTCHA обучается наблюдая за реальным трафиком на вашем сайте. По этой причине очки на стадии разработки и сразу после реализации могут отличаться от продакшена. Поскольку reCAPTCHA v3 никак себя не проявляет, вы можете сначала запускать reCAPTCHA не предпринимая никаких действий, а затем принять решение по порогах, анализируя получаемые результаты в консоли администратора. По умолчанию вы можете использовать порог 0.5.
Заключение
Этот код я писал под конкретные особенности моего сайта. Вполне возможно, что это же самое можно было сделать более изящно. Но, главные его достоинства:
На самом деле, есть место для улучшений: например, в приведённой реализации каждый поступивший от пользователя запрос проверяется. Можно, например, после первой проверки сохранять на сервере на некоторое время одобренный IP адрес и допускать к сайту без проверок. Либо можно генерировать уникальный маркер и сохранять в кукиз пользователя и в базе данных на сервере, сделав этот маркер действительным, например, на 10 минут.
При установке полной проверки доступа можно добавить функцию для проверки IP по WHOIS и допуска к сайту без капчи IP принадлежащих Google и Яндекс — чтобы поисковые роботы могли продолжать сканировать сайт.
Настройка ReCaptcha для WordPress: пошаговая инструкция
Настройка ReCaptcha для сайта WordPress — это простой способ избавиться от спамных рассылок и фильтрации ботов, выполнить которую можно быстро, ознакомившись с инструкцией ниже.
Получение ключей доступа к ReCaptcha Google
В первую очередь следует перейти на сайт и переходим в административную консоль.
После этого получаем:
Все готово, переходим к настройкам в CMS.
Настройки плагина
В первую очередь переходим в «Плагины»-«Добавить новый», где в строке поиска вводим «Invisible reCaptcha» и устанавливаем версию от Mihai Chelaru.
Переходим в настройки плагина.
Остальные настройки, такие как язык и позиция значка, рекомендуется оставить без изменений.
После выбираем настройки для всей системы WordPress:
Работа с контактными формами:
Все готово, теперь система будет постоянно отслеживать ботов и предотвращать спам от них.
Для чего это нужно?
Данная настройка может потребоваться в тех случаях, когда идет атака спамных заявок с несуществующих адресов от ботов.
В течение нескольких часов использования атака прекратиться.
Установка и настройка reCAPTCHA 2.0 от Google
В этой статье рассмотрим установку и настройку новой версии reCaptcha API от Google в которой обновлен дизайн и внедрены новые механизмы проверки. Этот инструмент поможет защитить формы вашего сайта от спама и роботов.
Для начала работы с reCAPTCHA API нам необходимо получить ключ от Google и создать приложение для работы. Переходим по ссылке для получения ключа. Вам необходимо иметь учетную запись в службах Google.
Установка reCaptcha 2, получение ключей, регистрация сайта
После добавления сайта вам будет выдано два ключа Публичный ключ – нужен для отображения блока reCAPTCHA на странице с формой. Секретный ключ – нужен для соединения с серверами Google и проверке правильности отправки reCAPTCHA. Секретный ключ должен хранится только на сервере и не должен быть доступен пользователям.
Далее проделываем операции как указано в инструкции. Размещаем код библиотеку reCAPTCHA 2.0 на нужной нам странице перед закрывающим тегом head в HTML-коде: А сам div блок вставляем в конце объекта form в том месте, где вы хотите видеть блок reCAPTCHA: Теперь переходим на нашу страницу, если код библиотеки и блок вызова reCAPTCHA с ключом установлены верно, то мы увидим нашу форму и блок проверки для роботов.
reCaptcha отображается на странице, но пока не выполняет никаких функций защиты от спама, форму можно просто отправить не ставя галочку в чекбоксе reCAPTCHA. Для проверки формы нам необходимо выполнить настройку на стороне сервера в скрипте формы.
Интеграция reCAPTCHA 2.0 на стороне сервера
Как видно из кода выше, элемент массива g-recaptcha-response имеет значение, а это значит что сервер проверки ответил нам на запрос и проверка пройдена удачно.
Далее нам необходимо отправить POST запрос на сервер Google reCAPTCHA по адресу google.com/recaptcha/api/siteverify и передамть ему переменные:
Готовим функцию подключения к серверу. В PHP должно быть активировано расширение CURL.
После выполнения запроса, сервер Google reCAPTCHA 2.0 отдаст ответ в формате JSON с полем success. Если его значение TRUE, то значит проверка пройдена и форму заполняет человек, а не робот. Если success равно FALSE, то форму заполняет спам-робот.
Пример отрицтельного ответа (для его просмотра раскомментируйте в коде строку var_dump($res);
Проверка пройдена успешно:
Чтобы посмотреть какие данные передаются из формы, вставьте вот этот код в страницу: На этом настройка и установка reCAPTCHA 2.0 от Google завершена и спам больше не будет вас доставать!
Популярное
В этой статье рассмотрим установку и настройку новой версии reCaptcha API от Google в которой обновлен.
Google reCAPTCHA стала одним из самых популярных решений, когда речь идет о предотвращении отправки.
В этой статье мы рассмотрим настройку и установку новой версии адаптивного слайдера изображений Owl Carousel.
Invisible reCAPTCHA защищает ваш сайт от спама и других видов автоматических злоупотреблений, например.
Адаптивный слайдер изображений Owl Carousel Slider. Имеет достаточно большое количество настроек, прост в.
Как работает ReCAPTCHA от Google: Самообман и раздвоение личности
Основатель Silktide, Оливер Эмбертон рассказал о том, насколько сложен и опасен для ботов маленький флажок «Я не робот» от Google. Действительно ли всё так серьёзно?
Мы в Бот-факторе порассуждали на эту тему, учитывая то, что недавно было объявлено о создании бота, который проходит первый уровень капчи за несколько секунд, и не только.
А количество новых светофоров, будет зависеть напрямую от истории вашего IP и браузера:
Последние технологии Google, отслеживают самые «микроскопические» изменения в «отпечатках пальцев» вашей Google-личности: часовой пояс и время вашего компьютера; IP-адрес и приблизительное местоположение; размер экрана и разрешение; браузер, который вы используете; плагины, которые вы используете; сколько времени потребовалось для отображения страницы; сколько нажатий клавиш, щелчков мышью и нажатий / прокрутки было сделано; процент «странного поведения», количество ваших характеров (типов личности, вашего раздвоения личности), списка настроений, и многое другое.
Поведению ботов на сайте задаются убедительные задержки, спотыкания при наборе букв, ошибки в словах.
Оливер Эмбертон убежден, что reCAPTCHA от Google слишком занята собственным самообманом, для того чтобы запутать ботов; а ботоделы заняты обманом Google; и эта гонка перевооружения прекратится лишь когда мировой прогресс ИИ достигнет наиболее качественного превосходства в своей сфере.
Действительно ли reCAPTCHA кому-то из нас помогала? Есть ли в ней хоть что-то полезное, кроме отправки своих данных в Google, для их последующей интеграции в основу рекламных продуктов?
Рад, что вы перешли со Spark на Vc, учтите что здесь выше конкуренция, и больше брызжущих желчью завистников-хейтеров. Один дурак подумал, что это перевод и ляпнул, что его мозгам это непонятно, другие поддержали)) тем не менее 1,7к чтений. возвращайтесь кстати к политической повестке, было круто;)
Какие-то обрывки мыслей. Что хотел сказать автор? Зачем эта статья на VC.ru? Интересная тема, из который вырезали саму суть.
Ну ИИ стоит научить хотя бы классике жанра: завязка, развитие, описание проблемы, решение, вывод. А то по строчке из какой-то, не сомневаюсь, полезной статьи достали и как-то скомкано изложили непонятно что хотя сказать.
А также задан риторический вопрос, подумайте наконец, нужна ли вам капча или устанавливаете ее по закону жанра, до кучи? Почему например нет капчи у vc, икеи, рибок, да вообще провести бы анализ, кто её ставит? В этом смысле хотелось бы больше эмпирического от автора.
Одного киборга нашли, товарищ майор
тогда уж товарищ старший уорент-офицер 4 класса
Это разве не способ обучения ультраглобальной нейросети для дальнейшего ее использования в беспилотных автомобилях?
Для пользователя плюсов от рекапчи нет, а для владельцев сайтов очень даже.
Перевод для тех, кто не понял сути: капча от гугла не просто картинка или защита от бота. Капча собирает наши данные, и пытается их всячески маскировать, чтоб не стырили. Но при такой-то защите, их всё равно тырят.
43 человека никогда не устанавливали на сайт капчу: половина из них считает её бесполезной, половине было некогда установить;
23 человека пользуются капчой, и считают её эффективной для сайта;
7 человек установили её просто так;
В статье о том, что такое современная капча от google
Tech PR, который мы заслужили
Да, это не попса в стиле «Цените какой я успешный» или «Миллион уникальных советов в новой интерпретации», и конечно не новость о том, как Греф чихнул в офисе и его тут же медиа облизали, выплюнув инфо.повод 🙂
Вы в шаге от того, что в 2019 году называют «токсичностью», на вашем месте попридержал бы коней.
Не раскроете данное определение?
Источаете желчь без повода — мало кому это будет нравиться.
На мой взгляд, это ответ иронией (смайл же стоит) на иронию.
Я не преследую цели, упрекнуть вас в обслуживании Сбербанка, например.
И тем более, мне не завидно, что я не Греф. Серьёзно, это просто бизнес.
Спасибо.
Да я не про себя, в целом — в дальнейшем такой стиль общения будет вам сильно мешать.
Вот в чем вы не разобрались:
— Я не имею ничего против политики VC, и контекста популярных материалов;
— Я тоже, очень сильно хочу, и люблю писать «попсу».
— Я стараюсь это делать, и подмечаю: «Да, [к сожалению] пока что, это не так [это ещё не попса]».
Я про все ваши комментарии в целом, а не про этот. Аналитический аппарат у вас немного сбоит 🙃И на свой счёт я ничего не принимал, если честно, не знаю, с чего вы это взяли.
А по мне, так ваши аналитические волны не достают до моих 🙂
Ну вот это как раз то, о чём я говорил. Ладно, просто будьте аккуратнее, пожалуйста.
Снисходительный тон — это именно то, к чему нужно прибегать, когда вас просто просят не хамить другим людям на площадке, да.
Или вы имеете в виду себя, мою оценку вашей мнительности?
Ну, на каждого заведена своя папочка, не волнуйтесь!
Новая reCAPTCHA от Google 3 версии: возможности и установка на сайт
Доброго времени суток 🙂
С каждым годом спама в Интернете становится всё больше. Большая заслуга этого «достижения» заключается в высоком уровне развития современных информационных технологий.
Если раньше для защиты сайта от спама и автоматических атак роботов было достаточно банальной капчи с вводом незамысловатых комбинаций букв и цифр, то в последние годы с развитием технологий искусственного интеллекта и технологий OCR обход капчи в автоматическом режиме перестал быть проблемой для хакеров.
В ответ разработчики придумывают и создают капчи со всё более совершенными алгоритмами, позволяющими отличить робота от настоящего человека.
До недавнего времени эталоном капчи являлась Google reCAPTCHA v2. Однако злоумышленники нашли ключи и к ней. В то же время её алгоритм не всегда позволяет реальным пользователям пройти её с первого раза, т.к. предлагаемые задачи усложнились настолько, что не всегда понятно, что требуется сделать.
Думаю, знакомая ситуация 🙂
Но, в то же время Google не собирается полностью отказываться от технологии CAPTCHA, т.к. польза её применения многократно превышает периодические неудобства конечных пользователей Интернет.
Компромиссным вариантом стала модификация данного продукта и выпуск Google reCAPTCHA v3, о которой мы сегодня и поговорим.
Особенности Google reCAPTCHA v3
При создании новой рекапчи Google решил проанализировать предыдущие версии данного продукта, а также все их преимущества и недостатки.
Если вкратце, то первая версия Google капча представляла собой текстовое поле для ввода символов с картинки, которую теоретически мог распознать только человек.
При разработке второй версии Google рекапча разработчики применили другой подход, призванный устранить главную проблему первой версии — невозможность её прохождения людям с проблемами со зрениям и дисплексией. Кроме этого, компанию критиковали за бесплатное использование человеческого труда, т.к. тексты с картинок, которые нужно было вводить для прохождения Google CAPTCHA, представляли собой не что иное, как сканы выпусков New York Times с 1851 года, которые Google использовала в своих целях.
Google reCAPTCHA v2 была лишена данного недостатка, т.к. при её прохождении учитывались поведенческие факторы, а для её разгадывания нужно было всего лишь поставить галочку в поле Я не робот. Подозрительным с точки зрения алгоритма пользователям предоставлялась дополнительная проверка в виде выбора подходящих по смыслу картинок, а благонадёжных же система пропускала дальше.
Однако, данную защиту уже давно научились взламывать. В первую очередь, за счёт сервисов по заработку на капче, используя труд реальных людей.
Да и у обычных пользователей, желающих получить доступ к информации, защищённой Google CAPTCHA, частенько возникали проблемы с корректным выбором картинок, а также данная технология критиковалась за использование куков браузеров клиента, что затрудняло её прохождение в анонимном режиме и при очистке cookies при завершении сессии.
Всё это послужило стимулом для разработки reCAPTCHA v3, бета-версия которой официально была презентована в мае этого года на конференции Google I/O 2018. А с октября 2018 года данный продукт находится в открытом доступе и воспользоваться ей может любой желающий.
Особенности алгоритма Google reCAPTCHA v3, естественно, никто не раскрывает, чтобы не давать лазейку хакерам для её взлома, но в ходе публичного бета-тестирования пользователи обратили внимание на следующие особенности новой капчи:
Как видите, для того, чтобы преодолеть Google reCAPTCHA v3, нужно просто оставаться человеком, как это ни банально звучит 🙂 Больше ничего не нужно никому доказывать — система сделает выводы сама.
При этом с технологической точки зрения также произошли некоторые улучшения, связанные не только с процессом её эксплуатации, но и с особенностями установки на сайт.
Создание Google reCAPTCHA 3 версии и генерация API ключей
Процесс установки Google рекапчи 3 версии, как и предыдущих двух, начинается с этой страницы. Для доступа к ней нужно иметь зарегистрированный Google аккаунт (почту на Gmail-домене) и быть авторизованным через него в браузере.
На данной странице имеется список всех создаваемых вами Google CAPTCHA, а также форма добавления новых:
На форме добавления новой капчи вам нужно будет выбрать её версию (сейчас доступны v3 и v2, до недавнего времени была доступна ещё и v1), ввести доменное имя сайта, на котором она будет располагаться (можно несколько, если у вас есть тестовый домен или вы ведёте разработку локально) и название для капчи с целью её идентификации в списке (можно хоть «111» назвать).
В качестве демо Google reCAPTCHA v3 я решил использовать свой тестовый локальный сайт, который я создавал для демонстрации reCAPTCHA v2, состоящей из одной-единственной формы добавления комментариев, защищённой капчей. Доступен он у меня будет на локальном компьютере по адресу http://recaptcha.v3, поэтому при создании reCAPTCHA я ввёл следующие данные:
При добавлении доменного имени сайта также появилась всплывающая подсказка, что капчу можно будет размещать также и на всех поддоменах добавленного сайта.
В нижней части формы добавления новой Google CAPTCHA находятся подписи соглашений с условиями использования данного продукта, которые включают в себя обязательное уведомление конечных пользователей об использовании reCAPTCHA v3 у себя на сайте (т.к. она невидимая), согласие на обработку персональных данных:
Интересным пунктом соглашения является запрет использования капчи для определения платежеспособности, финансового статуса и страховых возможностей — интересно, каким образом? 🙂
А также в самом низу формы появилось поле, после установки галочки в котором вам на email будут поступать сообщения о подозрительном трафике, зафиксированном с помощью Google reCAPTCHA, а также о проблемах с настройкой капчи и сайта в целом.
Если вы будете использовать капчу на реальном сайте, я лично настоятельно рекомендую выбрать данную возможность, т.к. она поможет зафиксировать Вам попытки атак на Ваш сайт и заблокировать злоумышленников по IP (если они, конечно же, не будут атаковать с разных).
После ввода данных и нажатия на кнопку Регистрация вы попадёте на страницу со сгенерированными API ключами для клиентской и серверной части сайта:
Также моё внимание привлекло сообщение в самом верху страницы о том, что при недостаточном количестве пользователей результаты проверки reCAPTCHA могут быть неточными. Из этого косвенно следует то, что алгоритм определения «человечности» пользователей будет вычислять показатель на основании средней активности пользователей сайта.
Т.е. шкала от 0 до 1 не будет универсальной для всех сайтов. И, нужно сказать, что это правильно, т.к. активность пользователей на странице сайта-казино и блога будет совершенно различной.
Ещё один вывод, который следует из данного сообщения — при локальной разработке и тестировании сайта Google reCAPTCHA v3 лучше отключайте, чтобы сэкономить свои нервы, т.к. она может не срабатывать из-за банальной нехватки статистики.
Правда, я проигнорирую свою же рекомендацию, т.к. мой демо-сайт будет одновременно являться и live/production, поэтому просто продолжу установку.
Установка Google reCAPTCHA v3 на PHP сайт
Шаги установки Google reCAPTCHA v3 очень подробно описаны на финальном экране создания Google reCAPTCHA v3 с API ключами, поэтому я просто их выполню.
Подключать я рекапчу буду, напомню, на сайт, состоящий из формы комментариев, которая выглядит так:
Backend сайта разработан на моём любимом PHP и для данного примера он будет состоять из 2 файлов. Первый из них, index.php, является точкой входа и содержит всего одну строчку рендеринга HTML файла с вёрсткой формы комментариев form.html.
index.php:
form.html:
Первым этапом добавления Google reCAPTCHA на сайт является добавление JavaScript кода, содержащего клиентский API-ключ, в HTML код сайта. Клиентский код состоит из двух скриптов: общего скрипта библиотеки, предоставляющего объект grecaptcha, который мы должны разместить в шапке сайта между тэгами head, и скрипта отправки запроса на сервер reCAPTCHA.
После добавления кода Google reCAPTCHA v3 код формы стал выглядеть следующим образом:
При этом на странице в правом нижнем угле появилась иконка Google reCAPTCHA, которая предусмотрена Пользовательским соглашением и служит для информирования пользователей о применении данного продукта. Так что удалять или скрывать её я вам настоятельно не рекомендую, а если это потребует сделать заказчик — можете смело приводить предыдущее предложение в качестве аргумента 🙂
Если до данного этапа с интеграцией Google reCAPTCHA v3 на сайт было всё понятно, то после завершения клиентской интеграции я немного растерялся насчёт того, как организовать серверную валидацию запросов, отправляемых с фронта.
Официальная документация Google никаких чётких указаний и примеров не даёт, поэтому пришлось находить решение самостоятельно 🙂
Google reCAPTCHA v3 в этом плане отличается от предыдущей версии, для интеграции которой нужно было встраивать в защищаемую от спама HTML форму скрытое поле с клиентским API ключом. В итоге, на сервере данный ключ подтверждался отправкой повторного запроса на Google сервер — и вся магия происходила на стороне PHP бэкэнда.
Из кода же рекапчи 3 версии напрашивается решение, что нужно делать ajax запрос на сервер к PHP скрипту, внутри которого проверять, является ли человек роботом или нет.
Отправку AJAX запроса из JavaScript на бэкэнд я реализовал следующей модификацией кода формы:
Как видите, отправку HTTP запроса из JavaScript кода я реализовал с помощью JS метода fetch(), запуская на бэке скрипт verify_captcha.php, передавая в него генерируемый на стороне Google reCAPTCHA сервера токен и action, который будет использоваться для дополнительной верификации запроса на нашем сервере.
Если отправителем запроса будет робот, я прописал код, который будет скрывать форму комментариев. Данную логику я реализовал исключительно в качестве примера, т.к. при автоматической отправке запросов хакеров вряд ли остановит скрытая форма 🙂
Скрипт verify_captcha.php, проверяющий данные, пришедшие с фронта, в данном случае будет выглядеть следующим образом:
В итоге, при отправке запроса на сервер рекапчи с нашего бэкэнда я получил ответ в следующем формате:
На основе полученных данных я и организовал финальную проверку перед обратной отправкой данных на сторону клиента, где проверяются название action, статус операции и оценка действий пользователя, определяющая «человечность» пользователя.
Приведённый пример весьма показательный и может применяться на практике, если вам нужно будет определить, является ли ваш клиент роботом или нет ещё на этапе загрузки страницы, не дожидаясь отправки им данных формы на сервер.
Однако у данного подхода есть несколько минусов:
Чтобы устранить данные недостатки я решил реализовать проверку действий пользователя не на этапе загрузки страницы с отправкой AJAX запроса на наш сервер, а непосредственно при оправке данных формы, прикрепляя к ней action и токен, сгенерированный на reCAPTCHA сервере.
Таким образом мне удалось снизить количество запросов на этапе загрузки страницы с 3 до 1 и сделать проверку более естественной.
При этом код формы у меня принял следующий вид:
Код серверной проверки валидности капчи в этом случае останется без изменений.
Как видите, в данном варианте я, по сути, совместил две версии Google reCAPTCHA в одну: капча является скрытой и токен является генерируемым, как в рекапче v3, но при этом серверная валидация происходит на сервере по запросу с фронта, а не при загрузке страницы.
Достигается это за счёт добавления скрытых полей в форму, значения которым задаются при получении ответа от Google reCAPTCHA сервера.
Кстати, хотел сделать одно важное замечание по поводу использования Google reCAPTCHA v3, о котором мне сообщил один из читателей в комментариях.
В официальной документации reCAPTCHA v3 сказано, что каждый reCAPTCHA response token считается действительным в течении 2 минут после его генерации, и может быть проверен только один раз для предотвращения атак повторной отправки. Если вам нужен новый токен, вы можете перезапустить верификацию капчи.
После того, как вы получили response token, вам необходимо проверить его в течении двух минут с помощью reCAPTCHA API, чтобы убедиться, что токен является действительным.
Простым языком, если вы генерируете reCAPTCHA response token для бэкэнда на фронте во время загрузки страницы, вам нужно генерировать его повторно перед отправкой запроса через форму, т.к. чисто теоретически пользователь может отправить на бэк данные, которые нужно проверять на спамность, и через 2, и через 5, и через 30 минут после открытия страницы в браузере.
И в таком случае, если токен не перегенеривать, он не будет считаться на бэке действительным, что приведет к тому, что корректные данные будут восприняты как спам и не обработаны должным образом.
Думаю, что такую ситуацию имел в виду и автор вышеупомянутого комментария, который сказал, что потерял деньги из-за этой особенности Google reCAPTCHA, о которой он был не в курсе. Скорее всего, у него произошла та ситуация, которую я предположил выше: клиент отправил заявку через сайт, но капча её не пропустила, т.к. он отправил её тогда, когда срок жизни токена истёк.
Поэтому данный нюанс очень важен. Не повторяйте чужие ошибки 😉 И ещё раз спасибо автору комментария.
Мои впечатления от Google reCAPTCHA v3
Что я могу сказать в итоге о новой Google reCAPTCHA v3? С точки зрения пользователя данный продукт однозначно намного удобнее своих предшественников за счёт того, что теперь не нужно вводить никаких трудноразличимых символов и выбирать непонятные картинки. А всё это время и раздражение посетителей, что может привести к тому, что они попросту передумают вводить информацию, а может и вовсе отказаться от использования ресурса в целом.
Теперь же, когда капча стала полностью невидимой, все эти проблемы остались в прошлом, т.к. решение о том, является ли пользователь роботом или нет, будет приниматься в фоновом режиме на основании его поведения на сайте. Главное только, чтобы данный алгоритм действительно защищал ресурсы от автоматизированных атак, т.к. его детали засекречены и всё, что нам остаётся — это верить на слово «Корпорации добра» 🙂
В плане интеграции Google reCAPTCHA 3 на сайт я лично никаких существенных изменений не заметил. Так же, как и раньше, валидация действий пользователя происходит на сервере и клиенте. Серверная часть вообще осталась без изменений — для серверной проверки я использовал код, разрабатываемый для Google reCAPTCHA 2.
На клиенте механизм же слегка изменился и теперь позволяет производить проверку пользователя на «человечность» как при загрузке страницы, отправляя на бэкэнд AJAX запрос, так и по запросу, т.е. при оправке данных каких-либо форм и, возможно, даже при произведении иных действий с DOM деревом элементов.
Одним словом, теперь при интеграции клиентской части кода Google reCAPTCHA v3 появилось ещё больше гибкости, вследствие чего появится ещё больше вариантов реализации капчи на сайтах.
С одной стороны, это хорошо, но, как по мне, готовые примеры от Google не помешали бы, т.к. бОльшую часть работы приходится делать самому, а пользователям, не сильно разбирающимся в программировании, банальное добавление reCAPTCHA на сайт будет не по зубам без посторонней помощи в виде статей и готовых плагинов для CMS.
Ну, и в завершение хочу сказать, что представленный в статье код вы можете найти на Github в репозитории, который создавался для статьи о разработке капчи на PHP, ссылку на которую я приводил ранее в статье.
Демо версию Google reCAPTCHA v3 вы сможете найти внутри репы в каталоге google_captcha_v3. Буду рад любым предложениям по улучшению кода и активному участию в виде pull-requests.
P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.
Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.
Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.
И с друзьями не забудьте поделиться 😉
59 комментариев к статье «Новая reCAPTCHA от Google 3 версии: возможности и установка на сайт»
Спасибо за подробный обзор с примерами кода, 2 версия капчи действительно парила мозги, иногда тратил по 2-3 минуты, щелкая по картинкам)
Пожалуйста. Спасибо Вам за отзыв 🙂
Спасибо за статью! Очень вовремя для меня.
Пожалуйста. Спасибо Вам за отзыв 🙂
Наконец-то первая содержательная статья про новую капчу. Хочу внедрить на сайт ее. Есть пару вопросов, ответы на которые не могу найти.
1. Что мне делать при регистрации если у пользователя будет оценка, к примеру, ниже 0.5?
Блокируем регистрацию для такого пользователя? Навсегда? На час или другой промежуток времени?
2. Может ли данная капча защитить от автоматической регистрации пользователей? Если да, то какой механизм защиты вы видите?
3. Может ли данная капча защитить от брутфорс атак формы авторизации?
Здравствуйте. Спасибо за комментарий 🙂 По поводу Ваших вопросов:
1. Хороший вопрос, на самом деле 🙂 Самое интересное, что сам Google не даёт чёткого определения, какая оценка соответствует роботу, а какая — человеку. Вот, что говорится в официальной документации Google reCAPTCHA v3: reCAPTCHA v3 returns a score (1.0 is very likely a good interaction, 0.0 is very likely a bot). Т.е. если балл 1.0 — это очень похоже на хорошее взаимодействие (реального пользователя), 0.0 очень похоже на бота. На этой же странице Google рекомендует брать в качестве граничного значения 0.5. Т.е. опять всё основано на рекомендациях и чрезмерной гибкости — решать в итоге всё равно Вам и устанавливать предел для роботов тоже Вам. Следовательно, если reCAPTCHA v3 покажет меньше установленной границы — пользователя можно считать роботом и его действие не засчитывать. По поводу постоянной или временной блокировки — также решать Вам. На практике используются оба подхода.
2. Да, может. С этой целью все капчи, собственно говоря, и разрабатываются 🙂 Механизм описан выше — выбираете граничное для робота значение и если рекапча покажет меньшее число — пользователь является роботом и его действие должно не учитываться. Как вариант, можно генерировать исключение или отдавать какой-то специфический HTTP код ошибки с обязательной записью попытки в лог сайта, чтобы в дальнейшем можно было проанализировать ситуацию и активность атакующих. Также будет хорошо блокировать пользователя, как Вы и сами предложили ранее, по его IP и внутреннему id пользователя, если атака производилась авторизованным пользователем (а при атаке с разных IP адресов данный параметр будет являться единственной зацепкой для блокировки).
3. Да, может. С помощью той же временной или постоянной блокировки по IP (внутренний id пользователя здесь не поможет, т.к. пользователь не авторизовался). Поскольку брутфорс-атаки — это разновидность автоматизированных атак, то reCAPTCHA с большой долей вероятности определит частые попытки авторизации как действия робота. А Вам останется только заблокировать данного пользователя. Для уверенности всё же я порекомендовал сделать на бэке дополнительную проверку на частоту запросов с одного IP. Если частота попыток входа с одного адреса будет больше 1 запроса в 2-3 секунды (быстрее реальный человек вряд ли введёт), то это — робот и смело можете банить его. Для начала можно временно (на час, например). Если пользователь получит несколько временных банов — можно банить постоянно.
Кстати, капча может спасти даже при атаке с разных IP (если каждая атака производится с разных IP), при которых бан по IP будет малоэффективен.
Здравствуйте, мне кажется, что в Вашем втором варианте при валидации капчи может вернуться ошибка: «timeout-or-duplicate» если пользователь затянул с отправкой формы после входа на страницу.
А вообще статься очень помогла, спасибо!
Спасибо за отзыв 🙂 Почему Вы думаете, что может возникнуть ошибка валидации CAPTCHA timeout-or-duplicate? Не замечал у себя при реализации. Можете подробнее кейс её возникновения описать?
У меня как раз возникает эта ошибка, если форсу отправить 2 раза.
Спасает обновление страницы.
Это большой косяк, если пользователь ошибся в номере телефона, отправил… и решил повторно отправить с правильным номером 🙁
Как лечить, пока не понятно…
А в чём косяк? Запрос с формы был отправлен. Логично, что для повторной отправки нужно будет вернуться обратно или перезагрузить страницу, если отправка с помощью AJAX без перезагрузки происходила.
Про косяк — я имел ввиду неудобство для пользователя. Т.е. человек ошибся в телефоне — отправил, решил и справить — и в итоге форма повторно не отправляется. Не каждый будет обновлять страницу и делать лишние телодвижения, а скорее просто уйдет к конкуренту.
Да — форма отправляется через ajax без перезагрузки.
На генерация токена назначил jquery функция.
1) Первый токен генерируется — по запросу формы.
2) Новый токен генерируется после отправки формы.
В итоге при повторной отправки формы нам не нужно делать лишних телодвижений в виде обновления страницы.
Что скажите, корректно это или есть подводные камни в таком способе?
Спасибо.
Да, вполне себе рабочий вариант в плане юзабилити. Да и в плане безопасности не должно быть каких-то дыр, т.к. по сути все действия происходят на стороне Google серверов. Даже если хакер начнёт делать DDOS или брутфорс атаки, то Гугл должен будет его развернуть.
Как реализовали это? Код не подскажете?
День добрый. Есть вопрос по гугл капча 3. Установил по вашей статье, есть один вопрос. Как назначать действие, после определения оценки?
Капчу поставил на отправку формы, скажем как сделать что бы форма не отправлялась, если оценка низкая или добавлялся еще какой момент для фильтрации бота.
Спасибо за комментарий. Отвечаю 🙂
Оценка действий пользователя прилетает с сервера Google рекапчи уже при втором запросе с бэкэнда, т.е. из PHP скрипта, как в моём примере, C#, Ruby, Python, Node.js или другого серверного языка программирования.
Поэтому без сабмита формы не обойтись, потому что именно так данные с клиентской части приходят на наш сервер. Не знаю особенности вашей ситуации, но при неудовлетворительной оценке действий пользователя действие объявлять нужно здесь:
Если под запретом отправки формы Вы подразумевали блокировку действия, производимого с помощью формы, на которой установлена капча, то код выше вам подойдёт. Кстати, обработку данных формы нужно прописывать при выполнении условия положительного ответа от Google сервера.
Добавил комментарии и обновил код статьи для предотвращения заблуждений у других. Спасибо за идею 🙂
Спасибо за ответ.
Рассказываю свой кейс.
Коммерческие сайты — форма заявки на услуги, данные уходят на почту операторам, те в свою очередь звонят и т/д
Бывает или летит куча заявок — ну это сразу видно спам, а бывают заявки — по которым или не могут дозвонится или там люди в шоке и ничего не оставляли. Тут момент — или это боты или уже конкуренты пакостят. Сайты на WP, за форму отвечает CF7.
Сейчас я значит сделал следующую схему.
Отказался от CF. Теперь за отправку отвечает Ajax + PHP обработчик + Google Form + reCaptca 3
Форма через Ajax уходит на обработчик, тот в свою очередь получает ответ от капчи. Если оценка ок — то отправляет в Google таблицу, дальше дело операторов.
Если оценка низкая, то обработчик отправляет письмо с пометкой бот, где есть IP, User Agent и прочая инфа по которой можно оценить адекватность заявки. И в Google таблицы ничего не заносится, что б не портить статистику.
Такой вот кейс, надо допилить и выкатывать в свет.
Изначально идея была просто заявки собирать в таблицы, но в итоге перерасло в такой кейс.
Главная цель — это не бесить людей «Я не робот» или неведимкой и «выберете светофоры» 🙂
Уже позже посмотрим как это все работает. Я кстати правильно понимаю, что в идеале ставить одну капчу на все сайты, что б статистика собиралась более полной!?
И последний вопрос, а почему в комментариях у вас капча 2й версии!? 🙂
Для Вашего кейса данная капча подойдёт идельно. В принципе, Вы описали стандартный случай её использования.
По поводу статистики — тут уже, как Вам будет угодно. Нужно будет отслеживать статистику по сайтам — регистрируйте API ключ капчи на разные аккаунты, если не принципиально — можно и на один все добавить.
По поводу reCAPTCHA 2 на данном сайте — это, что называется, «сапожник без сапог» 🙂 На самом деле просто руки не дойдут поменять. У меня и до текущей реализации руки наверное с год доходили. И решился её установить только после того, как пользователи в комментариях стали жаловаться. До этого стояла стандартная WordPress CAPTCHA.
С этой пока всё в порядке, спама в комментах не очень много, да и пользователи сильно не жалуются. Но есть ещё нюанс — для reCAPTCHA v3 придётся немного пересматривать дизайн, потому что она сама по себе скрытая, но сбоку экрана появится иконка о том, что она установлена (как на превьюшке к статье). Придётся подвёрстывать кнопку «Вверх», на месте которой плашка вылезет.
В общем, как-то соберусь 🙂
А на коммерческие сайты я ставлю новую рекапчу, собственно говоря, необходимость её установки и подвигла меня на написание этой статьи 🙂
А можно установить рекапчу перед входом на сайт, чтобы отсекать парсеров и подозрительных ботов? Какой в этом случае код будет?
Вечер добрый 🙂 Можно, в статье есть вариант html кода страницы для отправки запроса на валидацию капчи сразу после загрузки страницы с помощью AJAX запроса на сервер приложения. Если будут проблемы с установкой — обращайтесь, будем разбираться вместе 🙂
Ну, чего прописать, я всем желающим даю. А уж куда — тут уж извините, всё индивидуально 🙂 Могу и с этим, конечно, помочь, но это уже за деньги.
Спасибо, что напомнили про деньги, иначе не раскачался бы, а так посидел и сделал.
Хороший пример, но добавьте, что библиотеки для php, которые обрабатывают json и curl, могут быть не установлены по умолчанию. Я наткнулся на эти грабли.
Мне вот нравится, когда проверка идет в фоне, а пользователь смотрит на неактивную кнопку «отправить».
Может у вас есть подобный пример?
Готового примера у меня нет, но Вы сами можете его сделать на основании кода из статьи 🙂 Просто в данном фрагменте укажите идентификатор кнопки и изменения её стиля (в примере происходит полное скрытие элемента):
А вообще насколько она надёжная, эта капча?
Вы статистику смотрели, есть ложные отказы или пропуски?
Пока сложно что-то сказать, технология новая. Но оснований не доверять Гуглу, как по мне, нет 🙂
Знаете, нужен какой-то тест на робота. Как вот к ней подойти, чтобы она не пропустила?
Меня со всех компьютеров и всех телефонов пропускает. Может она вообще всех любит? 🙂
Попробуйте потестировать в режиме инкогнито браузера. Это самое простое. Плюс, самый верный способ — автоматизация процесса тестирования для имитации DDOS, BruteForce и другие видов атак с помощью специальных инструментов.
Собственно говоря, данными методами и пользуются хакеры для обхода капчи и взлома сайтов.
Из самых доступных инструментов могу посоветовать Postman и другие REST клиенты, позволяющие делать массовую отправку GET/POST запросов. Запросы отправлять на url сабмита формы.
Знаете, первое что я делал — это тестировал в режиме «инкогнито» — проходит. Думаю, прикрутить себе лог с оценкой, которую выдала рекапча.
Скажите, а можно на бэкенде обойтись без функции CURL? У нас библиотека php-curl конфликтует с другими, и от неё приходится отказываться.
Есть идея поставить другой обработчик php именно на этот скрипт, но это какие-то костыли
Как альтернативу можете попробовать отправить POST запрос с помощью PHP file_get_contents().
Попробовал прикрутить капчу к обратной связи. при капча пройдено письмо ушло, если тут же снова отправить обратную связь, пишет капча не пройдена, но при этом письмо обратной связи отсылает. и большой не достаток, капча не будет пройдена пока не перезагрузишь страницу.
И маленький вопрос, что такое у вас там «add_comment»?
День добрый. Ситуация с перезагрузкой страницы и неработающей капчей уже обсуждалась в комментариях. Это вполне нормальное поведение для reCAPTCHA и никак не её недостаток 🙂 По поводу отправки письма при не пройденной капче — это уже проблемы реализации. Код отправки письма должен быть внутри условия успешного решения Google reCAPTCHA:
По поводу add_comment — это название действия, защищаемого с помощью reCAPTCHA. И данная информация участвует в формировании токена капчи на сервере reCAPTCHA. По сути, у вас здесь может быть любая строка. Главное, чтобы она была одинаковой в клиентском коде перед отправкой запроса на бэкенд и в коде проверки параметров запроса на сервере.
Приветствую.
Есть идеи как прикрутить капчу на форму входа\регистрации wordpress?
Пока вижу только способ, править файл wp-login.php где сама html форма идет.
Но это путь в никуда ибо после обновления, велика вероятность перезаписи файла и прощай вся настройка.
Ну и даже это у меня только в теории, тк не совсем понятно как корректно все это дело подружить 🙂
Добрый вечер! 🙂 Ход мыслей по поводу «пути в никуда» у вас верный. В WP никто стандартные элементы руками не правит. Для этого в API WordPress существуют хуки — методы, позволяющие добавлять кастомный код в стандартные блоки кода движка.
Для формы входа можете воспользоваться хуком login_form, примеры использования которого и описание можете найти по приведённой ссылке.
Для формы регистрации можете воспользоваться хуком register_form.
В качестве подробного мануала для кастомизации формы регистрации WordPress можете воспользоваться данной статьёй.
Мне кажется или теперь машины проводят тест Тьюринга на людях??
Ну, в чём-то Вы правы 🙂 Изначально CAPTCHA — это и есть автоматизированный тест Тьюринга.
Более подробно об истории возникновения капчи, её разновидностях и принципе работы можете прочитать здесь.
почему у меня на вот эту строку ругается?
$params = [
Parse error: syntax error, unexpected ‘[‘ in
Проверьте близлежащий код. Скорее всего, ошибка даже не на этой строке. Обычно подобная ошибка возникает, когда не закрыты скобки или кавычки либо не стоит запятая или точка с запятой в конце строки.
Не срабатывает у меня и всё, полночи промучился, по трём разным статьям, по одному видео и ни как. Ключи и открытые и закрытый есть.
Даже не знаю что и спросить..
Как дебаггер включить? Чтоб увидеть в чём может быть загвоздка..
А где именно проблема? Что конкретно не работает?
Смысл в том, что всё по инструкциям, а сообщения отправляются!! Есть форма отправки на е-маил с прикреплением файла, так вот если давить на кнопу «Отправить» с периодичностью в секунду, то и количество писем на почту приходит сколько раз я нажал на кнопку «Отправить»!! И капча не срабатывает, куда копать, на что смотреть??
Дебажить код тогда нужно и смотреть, какие данные в итоге приходят на бэкэнд с сервера Google reCAPTCHA, а также какие данные передаются с фронтэнда на бэкэнд.
Для дебага в JS коде (фронтенд) используйте следующую функцию:
Для PHP я лично пользуюсь следующей конструкцией для читабельного результата:
Добрый день, очень полезная статья.
У меня только возник вопрос, у меня на сайте 2-3 формы на странице, и никак не могу реализовать работу всех форм, работает только первая, остальные не проходят проверку и выдает ошибку
Здравствуйте. Спасибо за отзыв 🙂
По Вашему вопросу — нужно убедиться, что у всех форм и элментов внутри них id уникальные. То поведение, которое Вы описываете, очень похоже на то, что id у всех один, тогда срабатывает только первая форма — остальные не воспринимаются.
А бэкэнд код останется без изменений. Один скрипт для всех форм отработает. Единственное, для новой reCAPTCHA v3 нужно action посылать на бэкэнд — так вот их тоже нужно будет сделать разными для всех форм.
Сам интерес, id были разные, в js коде тоже добавлял копии id, но при отправке второй или третей формы, выдает false.
Изменил js с определением класса, но тогда все перестало работать.
Не понял что значит «для новой reCAPTCHA v3 нужно action посылать на бэкэнд — так вот их тоже нужно будет сделать разными для всех форм.»
Это нужно action в js указывать или в теге form? У меня в теге form указан action везде одинаковый «/mail.php».
Изменить значение action при отправке на бэкенд — это поменять значение переменной captcha_action в JS-коде. Для всех трёх скриптов там должны быть разные данные.
И ещё не лишним будет подебажить ответ сервера reCAPTCHA при отправке ему запроса из PHP кода. Там обычно подробно описывается причина, по которой алгоритм считает пользователя роботом.
Огромное спасибо, все работает, не знаю, правда, правильно ли сделал, но поставил обработку классов в js, и немного пришлось изменить сам js код, все остальное без изменений.
вот как у меня выглядит код
Из того кода, что у Вас вышел, я заметил только, что доступ к элементам форм для присвоения им значений токенов, возвращённых с сервера рекапчи, вы получаете по классам, а не по id. В остальном логика та же, что я и говорил.
Для красоты кода могу посоветовать следующий вариант:
В этом варианте и значения action, которые отправляются на сервер Google с фронта и участвуют в формировании токена, будут уникальными. О необходимости делать их уникальными я говорил ранее.
Здравствуйте. Честно говоря, затрудняюсь ответить. Google держит свои алгоритмы классификации пользователей на ботов и реальных юзеров в тайне. Возможно, Вы допустили ошибки при имплементации капчи на сайт. Проверьте ещё раз все шаги установки reCAPTCHA v3 и нужно дебажить код на каждой итерации, чтобы видеть, какую оценку пользователю даёт сервер Google.
У Вас указано в проверке (на сервер): если больше 0 (> 0), тогда делаем отправку формы.
Каково вероятность, что бот может и 0,3 и выше набрать?
Добрый день.
Заметил некий нюанс. У вас токен генерится при загрузке страницы, однако Google (https://developers.google.com/recaptcha/docs/verify) предупреждает, что время жизни токена ограничено двумя минутами.
«Each reCAPTCHA user response token is valid for two minutes…»
Поэтому имеет смысл получать токен непосредственно перед отправкой формы, навесив эту функцию на событие ‘submit’.
Да, действительно, есть смысл. Согласен. Реквест с формы, защищённой капчей, может отправляться и через час после открытия страницы. Как-то не долгядел это ограничение.
Здравствуйте, почему статья не учитывает временной отрезок жизни капчи в 2 минуты?
Я на этом прокололся и потерял деньги для компании. Т.к. капча подгружается при загрузке страницы, то по истечении 2 минут она аннулируется и проверка не проходит.
Для повторного использования токена, по истечению времени или для отправки повторной формы, необходимо его запросить заново посредством метода grecaptcha.execute.
Обязательно добавьте данную заметку.
Спасибо за замечание. Да, действительно этот кейс является очень коварным. Но в виду того, что большинство пользователей с ним вряд ли столкнётся (если делать стандартную валидацию капчи при отправке данных через HTML-форму), я об этом не писал. Теперь добавлю обязательно.
Здравствуйте. Ответ на Ваш вопрос уже есть в комментариях под статьёй. Прочитайте их внимательно, пожалуйста 🙂 Вы не первый, кто сталкивается с такой проблемой 😉
Здравствуйте. К сожалению, по описанию проблемы сложно определить в чем причина. В таких случаях всегда нужно смотреть сайт.
Здравствуйте! подскажите! у меня есть свой аккаунт в гугле, я могу установить Google reCAPTCHA v3 на сайт, который не связан с моим аккаунтом.