Как включить Google RECAPTCHA 2 в белый список php форм ввода - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть форма, которую я решил включить Google recaptcha в качестве дополнительной меры безопасности.Когда я добавил recaptcha, это вызывает ошибку, потому что recaptcha не внесен в белый список.Я прочитал, что HTML5 не позволяет присваивать атрибуту имени div.т.е. <div name="myName"></div>. Против соглашения, я попытался добавить атрибут имени в div recaptcha и добавить это имя в белый список.Этот подход не удался.Внутри div recaptcha есть iframe с атрибутом name.Я попытался использовать имя iframe в белом списке.Этот подход также не удался.Есть скрытый ввод, который имеет id = "recaptcha-token".Я добавил 'recaptcha-token' в белый список.Этот подход также не удался.Скрытый ввод генерируется API-интерфейсом recaptcha, поэтому я не думаю, что у меня есть средство присвоения атрибута имени этому входу.У кого-нибудь есть обходной путь или предложение?

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

Recaptcha работает, как ожидалось, если я удаляю белый список входов формы.

Это div внутри формы.

<div class="row">
  <div class="col-md-12">
    <div class="g-recaptcha" data-sitekey="<?php print $public_key;?>"></div>
  </div>
</div>

В форме есть скрытый ввод, содержащий токен.Этот вход и токен полностью отделены от Google Recaptcha.Однако этот токен должен быть проверен перед тем, как входные данные формы будут сравниваться с белым списком $.

Вот блоки кода:

function verifyFormToken($form) {
    if(!isset($_SESSION[$form.'_token'])) { 
        $errors[]= "Session not set and no token";
        return false;
    }else{
        //echo 'Session token is set.'.'</br>';
    }   

    if(!isset($_POST['token'])) {
        $errors[]= 'No form token was sent!'.'</br>';
        return false;
    }

    if ($_SESSION[$form.'_token'] !== $_POST['token']) {
        $errors[]= 'tokens don\'t match!'.'</br>';
        return false;
        die();
    }else{
        //echo 'Tokens match. Good to go.'.'</br>';
        return true;
    }   
}

    // VERIFY LEGITIMACY OF TOKEN
if (verifyFormToken('form1')) {
    // Build a whitelist of form inputs
    $whitelist = array('token','req-fName','req-lName','req-email','req-phone','req-address','req-city','req-   state','req-zip','req-message','req_method','req-dateDepart','req-dateReturn','recaptcha-token','submit');

    foreach ($_POST as $key=>$item) {
        if (!in_array($key, $whitelist)) {
            writeLog('Unknown form fields');
            die('Hack-Attempt detected. Only the fields originally included in the form are allowed!');
        }
    } 
}

1 Ответ

0 голосов
/ 28 сентября 2018

Этот ответ пришел с phpbuilder.com. Оказалось, что мне нужно было включить " g-recaptcha-response " в белый список.Надеюсь, что это поможет всем, кто столкнулся с этой проблемой.

...