У меня есть форма, которую я решил включить 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!');
}
}
}