Проверка Recaptcha v2 - PullRequest
       30

Проверка Recaptcha v2

0 голосов
/ 18 марта 2019

Я пытаюсь использовать Recaptcha v2 для защиты от грубой силы.У меня все настройки настроены и работают так, что пользователь должен проверять каждый раз, когда он входит в систему.ОДНАКО, при попытке автоматизированной грубой силы атака все еще успешна.Я знаю, что это потому, что они могут использовать исходный ответ recaptcha со своего первого входа в систему и использовать его каждый раз.Итак, я спрашиваю, как я могу сделать так, чтобы он каждый раз соответствовал новой проверке?Может быть, получить ответ, когда истекает капча?Вот мой HTML-код:

<div class="g-recaptcha" data-sitekey="6LdRT5QUAAAAAD_BucIv7sDUhLE7iVtHRUR9LyhM"></div>
              <br/>

PHP:

     $secret = 'my secret';
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);

    echo $responseData;

        if($responseData->success)

    {



            if ($state->num_rows == 1)

     {
        $row[]=array($firstName, $lastName);    
        echo json_encode($state);
        $_SESSION['uName'] = $uName;

     }
            else {
                echo ("false");
        }


 } 
    else {
                echo ("false");
        }

}

Заранее спасибо.

1 Ответ

0 голосов
/ 18 марта 2019

В вашем коде две ошибки:

1.Вам нужен новый токен при каждой загрузке

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

Каждый токен ответа пользователя reCAPTCHA можетбыть проверенным только один раз.Если вам нужен новый токен, вам нужно вызвать grecaptcha.reset (), чтобы попросить конечного пользователя снова проверить с помощью reCAPTCHA.

grecaptcha.reset (opt_widget_id) Сбрасывает виджет reCAPTCHA.opt_widget_id Необязательный идентификатор виджета, по умолчанию используется первый созданный виджет, если он не указан.

<script type="text/javascript">
  $(document).ready(function() {
    grecaptcha.reset();
  });
</script>

2.Вы не проверяете ответ reCAPTCHA

Вам нужно POST следующую информацию: https://www.google.com/recaptcha/api/siteverify

МЕТОД: POST

POST Описание параметра
секрет Требуется.Общий ключ между вашим сайтом и reCAPTCHA.
ответ Обязательно.Маркер ответа пользователя, предоставленный клиентской интеграцией reCAPTCHA на вашем сайте.
remoteip Дополнительно.IP-адрес пользователя.

Когда вы разместите 2-3 части на веб-сайте, вы получите объект JSON обратно.В этом объекте у него будет ключ «успех».Если это так, тогда они проверяются.

«Успех» должен быть в вашем операторе PHP if.

Источники: Запрос API JS-API Проверочный ответ

...