Замена капчи eForm на Google reCAPTCHA

Опубликовано: 11 Июн 2017

Взято тут.

Всем известно что капча, используемая в MODx Evo, достаточно слабо защищает от спама и любое количество скрытых полей не помогает избавиться от данной проблемы.
В этом примере рассмотрим само совершенство: Google reCAPTCHA. Для начала рассмотрим все достоинства данной капчи:

•    Google использует двухфакторную авторизацию в то время, пока, якобы, идет загрузка капчи после нажатия
•    Помимо всех стандартных правил, reCAPTCHA проверяет "качество"  пользователя
•    Если пользователь не проходит "быструю" идентификацию ему, например не авторизован в google, или его поведенческие факторы похожи на типичного спаммера, то ему будет предложен второй вариант прохождения капчи - это подбор картинок по требованию

Конечно целенаправленный спам, купленный за деньги все-таки сможет пробраться. Но вот спам роботы такую защиту пройти не смогут.
Итак рассмотрим как же подключить google reCaptcha вместо стандартной капчи ModX на примере сниппета eForm, используемого для формы обратной связи.

1.    Первым шагом необходимо зайти на https://www.google.com/recaptcha/intro/index.html. Там нажать на "GET reCAPTCHA".

2.    В появившемся окне необходимо добавить сайт. В первое поле вводим название (необходимо для того чтобы лучше ориентироваться при большом количестве подключенных сайтов). Во второе поле вводим домен сайта (желательно без www, таким образом подкюченная капча будет работать не только на указанном домене, но и на домене с www и любых поддоменов вашего сайта)

3.    После добавления сайта откроется страница с настройками капчи от гугла. Раскрываем список и копируем оттуда код вызова google API

4.    Следующим шагом переходим в чанк в котором задан шаблон для формы сниппета eForm. И убираем у него строки используемые для ввода текста с картинки они нам больше не понадобятся

<p>Введите код с картинки: <br />
    <input type="text" class="ver" name="vericode" /><img class="feed" src="" alt="Введите код" />
</p>

Вместо этого вставляем код, который нам предлагает Google

<div class="g-recaptcha" data-sitekey="ВАШ_СЕКРЕТНЫЙ_КЛЮЧ"></div>

Теперь необходимо заменить обработчик капчи MODx на обработчик от Google. В файле eform.inc.php (находится по пути: assets/snippets/eForm/) необходимо найти строчку "# check vericode", находится она примерно в районе 185 строки. Оставляем первое условие после данной строчки

if($vericode) {}
 
И между фигурными скобками вставляем следующий код
if(isset($_POST['g-recaptcha-response'])){
          $captcha=$_POST['g-recaptcha-response'];
        }
        $secretKey = "ВАШ_СЕКРЕТНЫЙ_КЛЮЧ";
        $ip = $_SERVER['REMOTE_ADDR'];
        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip);
        $responseKeys = json_decode($response,true);
        if(intval($responseKeys["success"]) !== 1) {
          $vMsg[count($vMsg)]=$_lang['ef_failed_vericode'];
          $rClass['vericode']=$invalidClass; //added in 1.4.4
        } ;

 
В итоге должно получиться так

# check vericode
        if($vericode) {
        if(isset($_POST['g-recaptcha-response'])){
          $captcha=$_POST['g-recaptcha-response'];
        }
        $secretKey = "ВАШ_СЕКРЕТНЫЙ_КЛЮЧ";
        $ip = $_SERVER['REMOTE_ADDR'];
        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip);
        $responseKeys = json_decode($response,true);
        if(intval($responseKeys["success"]) !== 1) {
          $vMsg[count($vMsg)]=$_lang['ef_failed_vericode'];
          $rClass['vericode']=$invalidClass; //added in 1.4.4
        } ;}

На этом настройка закончена и осталось только проверить корректность работы

 

Комментарии (0)


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: