Ошибка Recaptcha "Неопределенный индекс: g-recaptcha-response", но только когда бот пытается отправить - PullRequest
0 голосов
/ 19 июня 2019

Я настроил 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 проясняет, что это отправка спама, вероятно, ботом.

...