Перейти к содержимому


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


Инсталлируем reCAPTCHA 2.0 от Google


Сообщений в теме: 2

#1 badisoft

    Продвинутый пользователь

  • VIP
  • 4 986 сообщений
Репутация: 761
Мастер

Отправлено 02 сентября 2015 - 21:03

Инсталлируем reCAPTCHA 2.0 от Google.

1. идем на https://www.google.com/recaptcha/admin, вводим свой домен (домены) и получаем "Ключ" и "Секретный ключ" для каждого домена.

2. в форму ввода данных, которую надо защитить капчей вставляем

{* BEGIN reCAPTCHA *}
<script src='https://www.google.com/recaptcha/api.js' async defer></script>
<div class="g-recaptcha" data-sitekey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"></div>
{* END reCAPTCHA *}

где XXX...XXX это тот самый "ключ" (не секретный).
В случае, если эта форма не в шаблоне, а в чистом HTML надо заменить смарти-комменты {* *} на HTML-комменты <!-- -->

3. в PHP-обработчик формы вставляем что-то типа

# BEGIN reCAPTCHA
$skey = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY';
$url = "https://www.google.com/recaptcha/api/siteverify?secret=$skey&response=".$_POST['g-recaptcha-response'];
#$result = file_get_contents($url); // простой вариант, когда allow_url_fopen включен
$ch = curl_init(); // то же самое, но через cURL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = json_decode(curl_exec($ch),true);
curl_close($ch);
if(!$result['success']) {тут какая-то реакция на то, что $result['success']==false, т.е. капча неверна};
# END reCAPTCHA


где YYY...YYY это тот самый "секретный ключ".
В $result['success'] будет либо false, либо true в зависимости от правильности ввода капчи.

4. если в .htaccess прописано что-нибудь типа

Header set Content-Security-Policy "frame-src 'self';"

то добавляем туда гугль

Header set Content-Security-Policy "frame-src 'self' https://www.google.com;"

Более-менее понятное описание заголовка Content-Security-Policy можно найти здесь - http://zabolotskikh....ecurity-policy/ - или поиском в поисковике.
Описание настроек капчи находится здесь - https://developers.g...ha/docs/display - но как-то очень уж убого там... Два варианта цвета и размера.

PS. Знакомому с PHP/HTML/Smarty этого более чем достаточно. Не знакомому - увы, либо придется стать знакомым, либо банально оплатить внедрение.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 zcz

    Продвинутый пользователь

  • Assistent vsupport.ru
  • PipPipPip
  • 103 сообщений
Репутация: 60
Продвинутый

Отправлено 09 августа 2017 - 09:05

Спасибо! думал самому писать придется, а тут все сть.
Не против, если в отдельный модуль сформирую? Что бы из админки настраивать можно было и заменяло обычную капчу?
Пишу, устанавливаю, натягиваю))) pix-art.ru

#3 badisoft

    Продвинутый пользователь

  • VIP
  • 4 986 сообщений
Репутация: 761
Мастер

Отправлено 09 августа 2017 - 17:53

Цитата

Спасибо! думал самому писать придется, а тут все сть.
Не совсем все есть :).
Приведенный вариант не прокатит, если капчей на странице две.
Например, когда дискуссии и вопрос по товару сделаны табами на странице товара, а и там, и там есть капча.
Одна из капчей работать не будет. Толи первая, толи вторая.
Надо делать по другому:
<div class="g-recaptcha" id="g-recaptcha-1"></div>
<div class="g-recaptcha" id="g-recaptcha-2"></div>
<script type="text/javascript">{literal}var onloadCallback = function() {$('.g-recaptcha').each(function(){grecaptcha.render(this,{'sitekey':'{/literal}{$smarty.const.CONF_RECAPTCHA_PUBLIC_KEY}{/literal}'});})};</script>{/literal}
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=ru" async defer></script>
т.е. каждой капче присваиваем свой ID, а после всех грузим скрипт.
перед 'sitekey' можно добавить
'size':'compact',
тогда капча будет не широкая и низкая, а квадратная (выше, но уже).
Параметр render со значением explicit говорит, что капча будет инициализироваться не через HTML, а через JavaScript.
А параметр onload содержит название JavaScript-функции, которая исполнится в момент загрузки страницы

Цитата

Не против, если в отдельный модуль сформирую? Что бы из админки настраивать можно было и заменяло обычную капчу?
В принципе, не против.
У меня такой модуль (с админкой) есть в коммерческом виде за 10$ - http://badisoft.ru/s.../recaptcha.html
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)