Recaptcha V3 не всегда возвращает счет и результат - PullRequest
0 голосов
/ 16 февраля 2019

Недавно я пытался внедрить Recaptcha V3 на одной из форм наших веб-сайтов, но столкнулся с ошибкой, когда некоторые пользователи не могли отправить форму, когда она возвращалась с сообщением об ошибке «Вы были обнаружены как бот... "в приведенном ниже коде.

Я распечатал все отправленные формы в файл журнала, и каждый раз, когда это не удавалось, $ recaptcha-> success, $ recaptcha-> action и $ recaptcha-> score всегдапусто.

Я обнаружил, что довольно часто он будет работать для пользователя и отправлять сообщение.

Я сам проверял форму, и большую часть времени она работала нормально, но я заметил, что сохранилЕсли вы попытаетесь отправить форму несколько раз, она иногда завершится с ошибкой и вернет ошибку.Когда он терпит неудачу, $ recaptcha-> success, $ recaptcha-> action и $ recaptcha-> score всегда пусты.

Я также заметил, что $ _POST ['recaptcha_response'] кажется пустым в этих случаях, хотяон пропускает первый оператор isset if.

//verify google captcha v3
if(isset($_POST['recaptcha_response'])){
    //build request
    $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
    $recaptcha_secret = 'MY_SECRET_KEY';
    $recaptcha_response = $_POST['recaptcha_response'];

    //get verify response data
    $ch = curl_init();

    curl_setopt_array($ch, [
        CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => [
            'secret' => $recaptcha_secret,
            'response' => $recaptcha_response
        ],
    CURLOPT_RETURNTRANSFER => true
    ]);

    $output = curl_exec($ch);
    curl_close($ch);

    $recaptcha = json_decode($output);


    // Take action based on the score returned:
    if ($recaptcha->success && $recaptcha->action == 'reportadvert' && $recaptcha->score > 0.1){            
        // Verified - success
        $save['captcha'] = "1";
    } else {
        // Not verified - show form error
        $errors['captcha'] = "You have been detected as a bot and blocked from sending this report for security reasons, please try again shortly or Contact us if you are still having issues.";
    }
} else {
     $errors['captcha'] = "You have been detected as a bot and blocked from sending this report for security reasons, please try again shortly or Contact us if you are still having issues.";
}  

Вот моя форма (некоторые другие мои поля удалены).Обратите внимание, что моя форма / страница содержится в одном сценарии php, и я отправляю форму в тот же сценарий php:

<form method="post">
  <input type="hidden" name="recaptcha_response" id="recaptchaResponse">

  <button type="submit" name="SendEm">Report Advert</button>
  <input type="hidden" name="submitted" value="TRUE" />
</form>

Я включил javascrit в верхней части страницы, я удалил свой сайтключ при публикации:

<script src="https://www.google.com/recaptcha/api.js?render=MY_SITE_RECAPTCHA_KEY"></script>

grecaptcha.ready(function() {
    grecaptcha.execute('MY_SITE_RECAPTCHA_KEY', {action: 'reportadvert'}).then(function(token) {
    var recaptchaResponse = document.getElementById('recaptchaResponse');
    recaptchaResponse.value = token;
   });
});

1 Ответ

0 голосов
/ 04 июня 2019

Я бы проверил коды ошибок в ответе сайта.В случае ошибки вы не получите действие и оценка параметров в ответе.

Site Verify Response , Код ошибкиссылка

...