reCaptcha v3 обрабатывает обратный вызов - PullRequest
0 голосов
/ 14 сентября 2018

Я последовал примеру recaptcha v3 и сумел заставить его вернуть обратный вызов с оценкой за страницу, аналогично их demo .

ЧтоЯ не понимаю, как обрабатывать счет, который возвращается.

Я понимаю, что успех основан на пороге.Используя пакет github, бэкэнд-проверка возвращает json (сбой или успех) обратно во внешний интерфейс. Должен ли я обрабатывать сбой или успех во внешнем интерфейсе, используя javascript? Что если браузер отключил JavaScript?

Я думал о том, чтобы использовать recaptcha v3 на всех страницах и на некоторое время блокировать пользователей, которых считали ботами.

Я использую laravel, но не могу понять, какобрабатывать проверку в промежуточном программном обеспечении или где-то еще, чтобы блокировать пользователей, если у них нет токена (javascript отключен) или они считаются ботами.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

токен reCAPTCHA должен быть проверен на стороне сервера. Прежде всего, прикрепите сгенерированный токен к вашей форме:

grecaptcha.ready(function() {
    grecaptcha.execute('{{env('RECAPTCHA_V3_PUBLIC_KEY')}}', {action: 'contactform'}).then(function(token) {
        $('<input>').attr({
            type: 'hidden',
            name: 'g-recaptcha-response',
            value: token
        }).prependTo('.contact-form')
    });
});

Затем, когда вы фиксируете ввод на вашем контроллере, вы можете использовать пользовательский запрос формы:

<?php

namespace App\Http\Requests;

use App\Rules\RecaptchaV3;
use Illuminate\Foundation\Http\FormRequest;

class ContactFormRequest extends FormRequest
{
    public function rules()
    {
        $rules = [
            'name' => 'required',
            'email' => 'required|email',
            'message' => 'required',
            'g-recaptcha-response' => ['required', new RecaptchaV3],
        ];

        return $rules;
    }
...

}

g-recaptcha-response поле равно required, поэтому, если пользователи отключат JS, они получат ошибку при проверке ввода формы.

Далее для g-recaptcha-response мы применяем пользовательское правило проверки: RecaptchaV3.

Вот моя реализация:

<?php

namespace App\Rules;

use GuzzleHttp\Client;
use Illuminate\Contracts\Validation\Rule;

class RecaptchaV3 implements Rule
{
    public function passes($attribute, $value)
    {
        $client = new Client();

        $response = $client->post('https://www.google.com/recaptcha/api/siteverify', [
            'form_params' => [
                'secret' => env('RECAPTCHA_V3_PRIVATE_KEY'),
                'response' => $value,
                'remoteip' => $_SERVER['REMOTE_ADDR'],
            ]
        ]);

        $decoded = json_decode($response->getBody());

        return $decoded->success;
    }

    public function message()
    {
        return "You didn't pass reCAPTCHA challenge!";
    }
}

Далее, в вашем контроллере используйте указанный выше запрос формы:

public function processContactForm(ContactFormRequest $request)
{
    ...
}

Надеюсь, это поможет.

0 голосов
/ 04 декабря 2018

К сожалению, в recaptcha v3 нет методов вызова, что означает, что нам нужно обрабатывать порог оценки на нашей собственной серверной стороне.

Лучшим решением было бы применить оба v2 и v3, например, если v3 не достигнет порогового значения, то появится вызов v2.Официальный сайт предлагает использовать двустороннюю аутентификацию, например, SMS.Тем не менее, я не думаю, что 70% людей будут делать это.

Я создал пакет composer для фреймворка Laravel, который поддерживает настройки партитуры.Вы можете проверить исходный код в github recaptcha :

Вы можете сравнить результаты для своего собственного обработчика оценок.

Основное использование будет выглядеть так:

{!!  GoogleReCaptchaV3::requireJs() !!} 
<form method="POST" action="/verify">
@csrf
{!!  GoogleReCaptchaV3::render('contact_us') !!}

<input type="submit" value="submit"> </form>
0 голосов
/ 14 сентября 2018

Если JavaScript отключен, reCAPTCHA все равно не работает, и большинство отправок форм будет / должно завершиться неудачей, если защита бота критична для вас.

Что касается результата, который возвращает V3, то полностью зависит от вас как вы справляетесь с этим.

Обычно это обрабатывается при проверке формы. С V3 вы можете потребовать, чтобы значение g-response было больше 0,8 или что-то по вашему вкусу. Точная реализация сильно зависит от структуры вашего приложения.

Из документов: reCAPTCHA v3 возвращает результат (очень вероятно, что 1.0 - хорошее взаимодействие, 0.0 - скорее всего бот). На основании оценки вы можете выполнять различные действия в контексте вашего сайта.

...