Как я могу использовать recaptcha для защиты от атак Javascript - PullRequest
2 голосов
/ 06 апреля 2020

Я создал сайт, который добавляет recaptcha v3 в соответствии с документами . На сайте есть мастер, через который пользователь проходит, чтобы забронировать отдых. На каждом шаге я выполняю следующий код:

function exec(action) {
    grecaptcha.execute(<myToken>, {action: <theNameOfTheWizardStep>}).then(function(token) {
        // verify with the backend
        let config = {method: 'POST', headers: {'Content-Type': 'application/json'},
                      body: JSON.stringify({recaptchaToken: token, ...}) };
        fetch('/book?action=' + action, config).then(r=>r.json()).then(result => {
            console.log(action + " result: " + JSON.stringify(result));
        });
    });
}

Мой сервер проверяет токен следующим образом (Python):

recaptcha_verify_url = 'https://www.google.com/recaptcha/api/siteverify'
resp = requests.post(recaptcha_verify_url + '?'
                     + 'secret=<mySecret>'
                     + '&response=' + recaptcha_token
                     + '&remoteip=' + request.remote_addr)
verification = resp.json()
print("verified: {}".format(verification))

recaptcha_token отправляется на мой бэкэнд с помощью Javascript выше, т. е. предоставляется вызовом grecaptcha.execute

Оператор печати регистрирует записи следующим образом:

verified: {u'action': u'book_step2', u'score': 0.9, u'hostname': u'mydomain.com', u'challenge_ts': u'2020-04-05T22:52:45Z', u'success': True}

Это хорошо работает, и на каждом этапе я получаю оценку 0,9.

Мне нужно защитить свой сервер от роботов c атак, подобных приведенным ниже, и я предположил, что счет уменьшится, если будет написан скрипт, который бомбардирует сервер запросами роботов c, но это не так. Я что-то запрограммировал неправильно, или этот тип атаки не тот, против которого рассчитана рекапча?

function thisIsAnInjectedHackerScript() {
    for(var i = 0; i < 50; i++) {
        exec('book_step2')
        .then(result => {
            console.log("executed " + i);
        });
    }
}
...