Я настроил re-captcha в PHP для формы контакта моего сайта, и она отлично работает, за исключением того, что я продолжаю получать сообщение об ошибке, когда бот пытается сделать запрос.
Поскольку это хорошо работает для меня (человека), я не уверен, что идет не так или как это проверить. Я перепробовал много вариантов, но не могу воспроизвести ошибку вживую.
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//First Take care of Captcha
$captcha=$_POST['g-recaptcha-response'];
$ip = $_SERVER['REMOTE_ADDR'];
$secretkey = "MYSECRETKEY";
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretkey."&response=".$captcha."&remoteip=".$ip);
$responseKeys = json_decode($response,true);
if(intval($responseKeys["success"]) !== 1) {
$captcha_fail = '<p style="color:red;"><strong>Please verify you are not a robot.</strong></p>';
} else { //If captcha succeeds
//Return clean version of a string
function spam_scrubber($value) {
//List of Bad Values
$very_bad = ['to:', 'cc:', 'bcc:', 'content-type:', 'mime-version:', 'multipart-mixed:', 'content-transfer-encoding:'];
//If any of the bad values in the submitted form, return the string as empty
foreach ($very_bad as $v) {
if (stripos($value, $v) !== false) return '';
}
//Replace any nrewline characters with spaces
$value = str_replace(["\r", "\n", "%0a", "%0d"], ' ', $value);
//Return value;
return trim($value);
} //End of spam_scrubber function
//Clean the form data:
$scrubbed = array_map('spam_scrubber', $_POST);
if (!empty($scrubbed['name']) && !empty($scrubbed['email']) && !empty ($scrubbed['comments']) ) {
//Create the Body
$body = "Name: {$scrubbed['name']}\n\nComments: {$scrubbed['comments']}";
//Make it wrap at 70 characters
$body = wordwrap($body,70);
//Send the email
mail('sales@example.com, 'Contact Form Submission', $body, "From: {$scrubbed['email']}");
//Print a message
echo '<p><strong>Thank you. Someone will get back with you as soon as possible.</strong></p>';
// Clear $_POST and scrubbed so form isn't sticky
$scrubbed = [];
$_POST = [];
} else {
echo '<p style="color:red;"><strong>Please fill out all fields!</strong></p>';
}
} // end of captcha conditional
} // end of POST conditional
Это ошибка, которую я получаю: неопределенный индекс: g-recaptcha-response
Информация в массиве POST проясняет, что это отправка спама, вероятно, ботом.