У меня есть форма, в которой я решил включить Google recaptcha в качестве дополнительной меры безопасности.
Когда я добавил рекапчу, возникает ошибка, потому что рекапча не внесена в белый список.
Я читал, что HTML5 не позволяет присвоить атрибут имени div. то есть <div name = "myName"></div>.
Вопреки соглашению, я попытался добавить атрибут name в div recaptcha и добавить это имя в белый список. Такой подход не удался.
В div recaptcha есть iframe с атрибутом name. Я пробовал использовать имя iframe в белом списке. Этот подход также потерпел неудачу.
Есть скрытый ввод с id = "recaptcha-token". Я добавил "recaptcha-token" в белый список. Этот подход тоже не удался.
Скрытый ввод создается с помощью recaptcha api, поэтому я не думаю, что у меня есть способ присвоить этому вводу атрибут name.
Есть ли у кого-нибудь обходной путь или предложение?
Примечание: проверка формы и белый список работали должным образом до добавления рекапчи.
Рекапча будет работать должным образом, если я уберу белый список входных данных формы.
Это 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!');
}
}
}
Этот ответ пришел с phpbuilder.com Оказывается, мне нужно было включить "g-recaptcha-response" в белый список. Надеюсь, это поможет кому-нибудь еще, столкнувшемуся с этой проблемой.